Can sıkıcı "Devamını oku" sayfalarını ekleyen site ShareThis.
Bu kötü davranışı önlemek için üç farklı seçeneğiniz vardır:
Pano olaylarını devre dışı bırak
Bu web siteleri, web geliştiricilerinin kopyala / kes / yapıştır işlemlerini durdurmasına ve gerçekleştirildiğinde bazı kodlar yürütmesine olanak sağlayan Pano API'lerini kullanıyor . ShareThis (ve bunun gibi diğer web siteleri) bu şekilde çalışır. Sadece copy olayını bekler ve etkili kopya yapılmadan hemen önce can sıkıcı "- See ..." 'yı içeren ek bir "katman" ekler.
Şimdi soru şu: pano olaylarını devre dışı bırakmak için herhangi bir yöntem var mı? Ne yazık ki, bunu Chrome / Chromium'da yapmak için bir yöntem bulamadım, ancak Firefox'ta iki farklı şekilde mümkün.
- İçeri gir
about:config
ve ara dom.event.clipboardevents.enabled
. Anahtar üzerine çift tıklayın (ayarlayın false
) ve işte! Pano olaylarını devre dışı bıraktınız ve hiç kimse tekrar panoya dokunmayacak.
- Firefox'un eski sürümleri için (gerçekten, gerçekten eski), seçeneğin aynısını yapan bu uzantı var
about:config
.
Pano etkinliklerini devre dışı bırakmak, nadiren kullanıldıklarından ve onları kullanmanın gerçekten bir amacı olmadığından (spam gönderme dışında) hiçbir web sitesinin deneyimine zarar vermemelidir.
İkinci çözüme geçelim.
Blok PayıBu
ShareThis'e ihtiyacınız yoksa, w.sharethis.com
etki alanını engelleyebilirsiniz . ShareThis'i (ve kaydettirmeyi ClipboardEvent
) yüklemekle sorumlu olan Javascript bu web sitesinden yüklenir.
Basit bir AdBlock filtresinden hosts dosyalarınızı düzenlemeye kadar (farklı bir şekilde engelleyebilirsiniz) (itibarımdan dolayı daha fazla bağlantı koyamayacağım için bu kapsamda değildir veya buraya bağlı değildir).
Bunu hosts
dosya aracılığıyla yapmanın bir örneği :
127.0.0.1 w.sharethis.com
Üçüncü çözüm en zor olanıdır ve yalnızca son çare olarak kullanılmalıdır.
Sorunlu web sitelerinde seçim özelliğini devre dışı bırakın
Panoya kopyalanan içeriği düzenlemek için, bu web siteleri Selection
anında seçimleri düzenlemelerine izin veren API'yi kullanır . Bu nedenle, bir çözüm herhangi bir türün tamamen devre dışı bırakılmasıdır Selection
(kod tarafında, açıkçası. Seçimleri yine de yapabileceksiniz).
Bu basit bir Tampermonkey / Greasemonkey betiği ile yapılabilir. Şu anda Chrome'u yükleyemediğim için yalnızca Firefox'ta test ettim. Bunun için üzgünüm.
Bu kaynak kod:
// ==UserScript==
// @name Goodbye selections
// @namespace tag: utils
// @include $put_here_a_website_you'd_like_to_disable_selections$
// @include $more_websites$
// @version 1
// @grant none
// ==/UserScript==
(function() {
var disableSelections = function() {
document.getSelection = window.getSelection = function() {
return { isCollapsed: true };
};
};
var script = document.createElement ("script");
script.appendChild (document.createTextNode ("(" + disableSelections + ")();"));
(document.body || document.head || document.documentElement).appendChild (script);
})();
Bunun işe yaraması için, yeni bir Greasemonkey / Tampermonkey betiği oluşturmanız ve @include
yönergeleri ayarlamanız gerekir . Her satıra bir web sitesi koyabilirsiniz ve böyle yapılması gerekir @include http://bad.website.address/
.
Bağladığınız web siteleriyle test ettim ve sorunsuz bir şekilde çalışıyor. Bununla birlikte, bunun Selection
tamamen yasal web siteleri tarafından kullanılmasından dolayı sorunlara yol açabileceğini unutmayın (örneğin, StackExchange metin kutuları bunları, bir düğmeyi tıkladığınızda, işaretinizin konumuna getirmek için bir simge eklemek için kullanırlar); Bu kullanıcılar sadece sorunlu web sitelerinde yayınlanmaktadır.
(Kullanıcı //
klibini Greasemonkey / Tampermonkey menülerinden oluşturuyorsanız ile başlayan satırları kaldırmanız gerekebileceğini unutmayın. )
Usercript açıklaması oldukça basittir. Birincisi, disableSelections
varsayılanı değiştiren document.getSelection
ve window.getSelection
sadece basit bir nesneyi döndüren işlevler adı verilen bir işlev tanımlar { isCollapsed: true }
. Neden? Çünkü ShareThis (JS kodlarını kontrol ettim) bu işlevi çağırır ve isCollapsed
özelliğin ayarlanıp ayarlanmadığını kontrol eder true
(öyleyse, "panoya zehirlenmesini" durdurur). Bunun gibi diğer web siteleri bu kontrolü gerçekleştirmeyebilir, ancak Selection
nesnenin okunaklı bir işlevini çağırmaya çalıştıklarında basit bir hatayla sonuçlanırlar .
Ardından işlev gövdeye / başlık / belgeye enjekte edilir ve otomatik olarak yürütülür. Sormanız gereken bir soru şudur: Javascript, her bir işlevi geçersiz kılmaya izin veriyorsa (hemen hemen) addEventListener
, etkinlik kopyala / kes / yapıştır olduğunda neden yalnızca hiçbir şeyi yapmama işlevini geçersiz kılmadınız? Cevabı oldukça basit. Bir kullanıcı kimliği kolay tahmin edilemeyen bir zamanda yürütülür; bu, ShareThis Javascript'in kullanıcı klibinden önce yüklenebileceği anlamına gelir ve hiçbir şey yapmaz. Bunun yerine, window.getSelection
işlevi sadece geçersiz kılmakla, herhangi bir sorun yaşanmayacaktır, çünkü bu işlev yalnızca bir kopya yapıldığında çağrılır ve% 100 olduğundan, bir metni kopyaladığınızda kullandığınız dizinin zaten yüklendiğinden eminiz.
Sonuç
Pratik olarak işe yaramaz bir API'yi devre dışı bıraktığı için en iyi ve en temiz çözüm açıktır.
İkincisi de geçerlidir, ancak ShareThis işlevselliğini kaybedeceksiniz.
Üçüncüsü, en "sahtekar" olan, ancak son çare olarak işe yarayabilir.