“Daha fazla bilgi edinin: www.site.com” un Tynt JavaScript dışı kopyala yapıştır işlemlerine enjekte edilmesini nasıl önleyebilirim?


30

Tarayıcınıza metin kopyalarken panonuza "Read more: www.site.com" gibi bir şeyler ekleyen pek çok site var. Bunu iğrenç buluyorum. Bir google araması , web sitesi Tynt hizmetini kullanıyorsa (yalnızca Tynt etki alanını engelleyerek), ancak birçok web sitesi kendi kendine yeten JavaScript'i kullanıyorsa, bunu durdurmanın bazı yöntemlerini ortaya koyar .

JavaScript’i kapatmanın yanı sıra bu davranışı engellemenin genel bir yolu var mı? Chrome kullanıyorum ancak tüm çözümlerle ilgileniyorum.

DÜZENLEME: Açık olmak gerekirse, birçoğu onsuz kırılacağından, bu web siteleri için JavaScript işlevselliğinin geri kalanını saklayabilmek istiyorum.

2 # EDIT: İşte bir Tynt engelleyici kullanmama rağmen beni taciz etmeye devam eden iki örnek web sitesi: Marjinal Devrim | Mali Zamanlar

İşte iki şunlardır StackOverflow soruları ve iki blog mesajlar Tynt olmadan manuel olarak gölgeli uygulamayı hayata yollarını açıklar. İşte güvenli bir şekilde engellemek için bunun ne kadar zor olduğunu açıklayan bir blog yazısı . İşte AdBlock'u kullanarak Chrome'da bunu nasıl engelleyeceğinize dair öneriler sunan en son tartışma (Mart 2013), ancak benim için işe yaramadı.

Yanıtlar:


24

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:configve 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.cometki 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 hostsdosya 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 Selectionanı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 @includeyö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 Selectiontamamen 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, disableSelectionsvarsayılanı değiştiren document.getSelectionve window.getSelectionsadece 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 Selectionnesnenin 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.getSelectioniş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.


Çok teşekkür ederim! Bu mükemmel. Bunun çok zor olması ve mükemmel bir çözümü olmaması utanç verici, ancak cevabınız şu anda internette mevcut olan en iyi bilgi gibi görünüyor. Size ödül vermekten çok memnunuz.
Jess Riedel

Evet, bu problem beni de etkilediğinden beri biraz araştırma yaptım. Bu arada ödül için teşekkür ederim - bu benim "yeni gelenler" StackExchange deneyimime yardımcı olacak!
Robertof

Re: ilki, bu bir metni kopyalamak için bir düğmeye tıklayabileceğiniz siteleri engeller mi? Örneğin, emojipedia.org/snowman . Ampirik olarak, Firefox'ta görünmüyor. Güzel. Re: engelleme ShareThis, benim hata ayıklayıcı şimdi "l.sharethis.com" ve "ws.sharethis.com" alt etki alanlarından yüklenen komut dosyalarını gösteriyor. Bu yüzden tek tam tedavinin, ShareThis.com alan adının engellenmesi olduğunu ve bunun büyük bir kayıp yaratmayacağını düşünüyorum. @Robertof teşekkürler!
Conrad Meyer,

Dikkat: pano olaylarını devre dışı bırakmak bazı sitelerin bozulmasına neden olabilir. Örneğin, aramaya yapıştırırken Discord'un çökmesine neden olur.
Nicholas

2

Bu tehlikeli eylemler Chrome'da "Evil'i Öldür" uzantısıyla engellenebilir:

https://chrome.google.com/webstore/detail/kill-evil/epieehnpcepgfiildhdklacomihpoldk

(EDIT) Bu uzantı facebook'ta garip sorunlara neden görünüyor, onu beyaz listeye eklediğinizden emin olun.


Mükemmel! Bu sorunu çözmeyi amaçlayan üç uzantı buldum: 1. Tynt Blocker. 2. RightToCopy. 3. Evil'i öldür (sayende martı). Kill Evil, phys.org'daki özellikle kötü pano manipülasyonlarını düzeltmeye çalışan biriydi,
Dave Burton

1
Endişeye gerek yok @DaveBurton - bu uzantının birçok sitenin oldukça garip davranmasına neden olduğunu lütfen unutmayın, bu nedenle yalnızca ihtiyacınız olduğunda etkinleştirin.
martı

2
Kill Evil, bir uzantıyı etkinleştirmek istemediğiniz sitelerin listesi olan bir dışlama listesini veya "beyaz listeyi" destekler (yani, "kötülüğe izin verme" listesi). İstediğim bu değildi: SADECE Kill Evil'i belirli bir sitede (phys.org) etkinleştirmek istiyorum. Bu yüzden, bu zor "olumsuz bakış açısı" normal ifadesiyle bitirdim, bu site dışında Kill Evil'i devre dışı bırakmak için: ^ https?: \ / \ / (?! ([A-zA-Z0-9 \ - \.] * phys \ .org))
Dave Burton

Arsız biraz regex seviyorum. Gönderdiğiniz için teşekkür ederiz.
martı

1

Bir Firefox eklentisi olmasına rağmen, NoScript güvenilir olmayan bir liste oluşturarak herhangi bir web sitesinden JavaScript'i engellemenizi sağlar.


2
Cevabınız için teşekkürler, ama ihtiyacım olan bu değil. (Sitede her yerde JavaScript'i kırmayacak bir şey istiyorum.) Daha spesifik olmak için soruyu düzenleyeceğim.
Jess Riedel,

1

HTML'yi görüntülenmeden önce otomatik olarak değiştirmenin bir yolunu arıyorsanız, Greasemonkey aracıdır ve değişikliği yapan bir kullanıcı betiği oluşturmanız gerekir.

Google Chrome'daki Greasemonkey Komut Dosyaları İçin Başlangıç ​​Kılavuzu makalesinden :

Chrome artık yerel olarak kullanıcı komut dosyalarını desteklemektedir. Bunları kullanmak için fazladan bir eklenti yüklemeniz gerekmez; Aslında, Chrome her kullanıcı komut dosyasını ayrı bir eklenti olarak görür, böylece onları kolayca yönetebilir ve kaldırabilirsiniz.

Greasemonkey hakkında internette bulunabilecek pek çok bilgi dahil birçok bilgi var. Bunların çoğu, Greasemonkey'in menşei olduğu Firefox için olurdu, ancak bugün Chrome'a ​​da başvurdular.

Site sorumlusu olarak "Daha fazla bilgi" dir sharethis.com. Engellerseniz, bu durmalı. Yüklü bir güvenlik paketiniz varsa, siteyi engellemek için kullanın. Aksi takdirde , ana bilgisayar dosyanızı kullanarak engelleyebilirsiniz .

sharethis.comBana verdiğin iki web sitesine Tynt sağlayan sağlayıcı. Tynt, bir web sitesinden ziyade bir teknoloji gibi görünüyor, bu nedenle elbette bu tür diğer sağlayıcılar olabilir. Ancak birinin çok nadir olacağını umması gerekir.


Tamam teşekkürler. Prensipte, bir greasemonkey betiği uygulandığı takdirde web sitesindeki herhangi bir şey düzeltilebilir. (En azından, herhangi bir JavaScript sorununun daha fazla JavaScript ile çözülebileceğini tahmin ediyorum.) Ödül için bu cevabı kabul etmek için, nasıl uygulanacağı hakkında daha fazla bilgiye ihtiyacım var.
Jess Riedel

Ne tür bir bilgi? Bir başlayabilir wikipedia dahil olmak üzere en önemli bağlantılar verir wiki ve userscripts.org .
harrymc

Diyelim ki, Tynt olmayan uygulamaların nasıl çalıştığının ve bunlar hakkında tam olarak ne yapıldığının bir açıklaması. Şimdiye kadar yazdığınız hiçbir şey bu kopyala-yapıştır sorununa bile özgü değil (genel olarak JavaScript'ten çok).
Jess Riedel

Tynt ile hiç tanışmadım (NoScript kullandığımdan beri merak ediyorum). Bağlandığınız makaledeki iki örnek web sitesinden biri kayboldu, diğeri artık Tynt kullanmıyor. Bir örnek var mı
harrymc

Bir Tynt-engelleme uzantısı kullandığımda bile bu davranışa devam eden iki örnek web sitesi eklemek için bir düzenleme yaptım.
Jess Riedel

0

Alternatif olarak, Chrome için "Düz Metin Olarak Kopyala" uzantısını kullanın. Daha sonra normal kopyalamanın yanı sıra menüde ek bir seçeneğiniz var. Chrome'da çalıştığını ve hiçbir şey kırmadığını tersine çeviriyor. https://chrome.google.com/webstore/detail/copy-as-plain-text-amazin/mkkcgjeddgdnikkeoinjgbocghokolck?utm_source=chrome-app-launcher-info-dialog


Adından, biçimlendirilmiş metni kopyalamayı bozduğunu mu düşünüyorsunuz? Bu bazen bazı insanlar için yararlıdır.
Conrad Meyer,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.