Bagaimana cara mencegah "Baca lebih lanjut: www.site.com" agar tidak disuntikkan dengan JavaScript non-Tynt ke dalam tindakan salin-rekat?

30

Ada banyak situs yang memasukkan sesuatu seperti "Baca lebih lanjut: www.site.com" ke clipboard Anda ketika Anda menyalin teks di browser Anda. Saya menemukan ini menjijikkan. Pencarian google mengungkapkan beberapa metode untuk menghentikan ini jika situs web kebetulan menggunakan layanan Tynt (dengan hanya memblokir domain Tynt), tetapi banyak situs web menggunakan JavaScript buatan sendiri.

Apakah ada cara umum untuk memblokir perilaku ini selain hanya mematikan JavaScript? Saya menggunakan Chrome tetapi saya tertarik dengan semua solusi.

EDIT: Agar lebih jelas, saya ingin dapat menjaga sisa fungsionalitas JavaScript untuk situs web ini, karena banyak yang akan rusak tanpa itu.

EDIT # 2: Berikut adalah dua contoh situs web yang terus melecehkan saya meskipun saya menggunakan pemblokir Tynt: Marginal Revolution | Waktu Fiskal

Berikut adalah dua pertanyaan StackOverflow dan dua posting blog yang menjelaskan cara untuk menerapkan praktik teduh ini secara manual tanpa Tynt. Berikut adalah posting blog yang menggambarkan betapa sulitnya untuk memblokir dengan andal. Berikut ini adalah diskusi terbaru yang saya dapat temukan (Maret 2013) yang menawarkan saran tentang cara memblokir ini di Chrome menggunakan AdBlock, tetapi tidak berhasil bagi saya.

Jess Riedel
sumber

Jawaban:

24

Situs yang menambahkan hal-hal "Baca lebih lanjut" yang mengganggu adalah ShareThis.

Untuk mencegah perilaku buruk ini, Anda memiliki tiga alternatif:

Nonaktifkan acara clipboard

Situs web ini menggunakan API Clipboard , yang memungkinkan pengembang web untuk mencegat tindakan salin / potong / rekat dan menjalankan beberapa kode saat dilakukan. Beginilah cara ShareThis (dan situs web lain seperti itu) bekerja. Itu hanya menunggu acara salin dan tepat sebelum salinan efektif dilakukan itu menambahkan "lapisan" teks tambahan yang berisi "- Lihat ...".

Sekarang pertanyaannya adalah: adakah metode untuk menonaktifkan acara clipboard? Sayangnya, saya belum dapat menemukan metode untuk melakukan ini di Chrome / Chromium, tetapi di Firefox dimungkinkan dengan dua cara berbeda.

  • Masuk about:configdan cari dom.event.clipboardevents.enabled. Klik dua kali pada tombol (atur ke false) dan voila! Anda telah menonaktifkan acara clipboard dan tidak ada yang akan menyentuh clipboard Anda lagi.
  • Untuk versi Firefox yang lebih lama (benar-benar lebih tua), ada ekstensi ini yang melakukan hal yang sama dari about:configopsi.

Menonaktifkan acara clipboard tidak boleh merusak pengalaman situs web mana pun karena jarang digunakan dan sebenarnya tidak ada tujuan untuk menggunakannya (selain spam).

Mari kita menuju solusi kedua.

Blokir Ini

Jika Anda tidak perlu ShareThis, Anda cukup memblokir w.sharethis.comdomain. Javascript yang bertanggung jawab untuk memuat ShareThis (dan mendaftar ClipboardEvent) dimuat dari situs web itu.

Anda dapat memblokirnya dengan berbagai cara, mulai dari filter AdBlock sederhana hingga mengedit file host Anda (ini tidak tercakup atau ditautkan di sini karena saya tidak dapat menempatkan lebih banyak tautan karena reputasi saya).

Contoh melakukannya melalui hostsfile:

127.0.0.1 w.sharethis.com

Solusi ketiga adalah yang paling sulit dan harus digunakan hanya sebagai upaya terakhir.

Nonaktifkan fitur pemilihan pada situs web yang bermasalah

Untuk mengedit konten yang disalin ke clipboard, situs web ini menggunakan SelectionAPI yang memungkinkan mereka untuk mengedit pilihan saat itu juga. Jadi, solusinya adalah sepenuhnya menonaktifkan segala jenis Selection(pada sisi kode, jelas. Anda masih dapat melakukan pilihan).

Ini dapat dilakukan dengan skrip Tampermonkey / Greasemonkey sederhana. Saya mengujinya hanya di Firefox karena saya tidak dapat menginstal Chrome sekarang. Saya minta maaf untuk itu.

Ini adalah kode sumber:

// ==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);
})();

Agar ini berfungsi, Anda harus membuat skrip Greasemonkey / Tampermonkey baru dan menyesuaikan @includearahan. Anda dapat menempatkan satu situs web per baris, dan itu harus dilakukan seperti @include http://bad.website.address/.

Saya mengujinya dengan kedua situs web yang telah Anda tautkan dan berfungsi tanpa masalah. Namun, perlu diingat bahwa ini dapat menyebabkan masalah karena Selections digunakan oleh situs web yang sangat sah (misalnya, kotak teks StackExchange menggunakannya untuk menyisipkan simbol, ketika Anda mengklik tombol, ke posisi caret Anda), jadi Anda harus mengaktifkan userscript hanya di situs web yang bermasalah.

(perhatikan bahwa Anda mungkin perlu menghapus baris yang dimulai dengan //jika Anda membuat skrip pengguna dari menu Greasemonkey / Tampermonkey, mereka akan secara otomatis menambahkannya)

Penjelasan skrip pengguna cukup sederhana. Pertama, ia mendefinisikan fungsi disableSelectionsyang menggantikan default document.getSelectiondan window.getSelectionfungsi dengan yang hanya mengembalikan objek yang mengandung { isCollapsed: true }. Mengapa? Karena ShareThis (saya memeriksa dalam kode JS mereka) memanggil fungsi itu dan memeriksa apakah isCollapsedproperti diatur ke true(jika ya, itu menghentikan "keracunan clipboard"). Situs web lain seperti itu mungkin tidak akan melakukan pemeriksaan itu, tetapi mereka akan berakhir hanya dengan kesalahan ketika mereka mencoba memanggil fungsi sah Selectionobjek.

Kemudian fungsi tersebut disuntikkan dalam tubuh / header / dokumen dan itu akan dieksekusi secara otomatis. Sebuah pertanyaan yang mungkin Anda tanyakan adalah: jika Javascript memungkinkan untuk menimpa (hampir) setiap fungsi, mengapa Anda tidak mengesampingkan addEventListenerfungsi tersebut untuk tidak melakukan apa-apa saat acara tersebut disalin / dipotong / direkatkan? Jawabannya cukup sederhana. Script pengguna dijalankan pada waktu yang tidak mudah diprediksi, ini berarti bahwa Javascript ShareThis dapat dimuat sebelum skrip pengguna, dan itu tidak akan melakukan apa pun. Sebagai gantinya, dengan hanya mengesampingkan window.getSelectionfungsi tidak akan ada masalah karena fungsi itu dipanggil hanya ketika salinan dilakukan, dan kami 100% yakin bahwa ketika Anda menyalin teks, skrip users telah dimuat.

Kesimpulan

Solusi terbaik dan terbersih jelas yang pertama, karena menonaktifkan API yang praktis tidak berguna.

Yang kedua juga valid, tetapi Anda akan kehilangan salah satu fungsi ShareThis ini.

Yang ketiga adalah yang paling "retas", tetapi sebagai upaya terakhir itu bisa berhasil.

Robertof
sumber
Terima kasih banyak! Ini luar biasa. Sayang sekali ini sangat sulit dan tidak memiliki solusi yang sempurna, tetapi jawaban Anda tampaknya merupakan informasi terbaik yang saat ini tersedia di internet. Sangat senang memberi Anda hadiah.
Jess Riedel
Ya, saya melakukan sedikit riset karena masalah itu mempengaruhi saya juga. Terima kasih atas hadiahnya - ini akan membantu pengalaman StackExchange "pendatang baru" saya!
Robertof
Re: yang pertama, apakah ini memblokir situs tempat Anda dapat mengklik tombol untuk menyalin beberapa teks? Misalnya, emojipedia.org/snowman . Secara empiris, di Firefox, sepertinya tidak. Keren. Re: mencekal ShareThis, debugger saya sekarang menunjukkan skrip memuat dari subdomain "l.sharethis.com" dan "ws.sharethis.com". Jadi saya pikir satu-satunya penyembuhan penuh adalah memblokir domain ShareThis.com lengkap, yang seharusnya tidak menjadi kerugian besar. Terima kasih @Robertof!
Conrad Meyer
Perhatian: menonaktifkan acara clipboard dapat menyebabkan beberapa situs mengalami kegagalan fungsi. Misalnya, ini menyebabkan Perselisihan macet saat menempel ke pencarian.
Nicholas
2

Tindakan najis ini dapat diblokir di Chrome dengan ekstensi "Kill Evil":

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

(EDIT) Ekstensi ini tampaknya menyebabkan masalah aneh di facebook, pastikan untuk memasukkannya ke daftar putih.

camar
sumber
Luar biasa! Saya telah menemukan tiga ekstensi yang dimaksudkan untuk mengatasi masalah ini: 1. Tynt Blocker. 2. RightToCopy. 3. Bunuh Evil (terima kasih untuk Anda, burung camar). Kill Evil adalah orang yang bekerja untuk memperbaiki manipulasi clipboard yang sangat jahat di phys.org,
Dave Burton
1
jangan khawatir @DaveBurton - harap dicatat bahwa ekstensi ini menyebabkan banyak situs bertingkah aneh, jadi, aktifkan saja ketika Anda membutuhkannya.
burung camar
2
Kill Evil mendukung daftar pengecualian atau "daftar putih," yang merupakan daftar situs yang Anda TIDAK ingin ekstensi diaktifkan (yaitu, daftar "izin kejahatan"). Bukan itu yang saya inginkan: Saya hanya ingin mengaktifkan Kill Evil ONLY di situs tertentu (phys.org). Jadi saya berakhir dengan ekspresi reguler "negatif lookahead" yang rumit ini, untuk menonaktifkan Kill Evil kecuali untuk satu situs itu: ^ https?: \ / \ / (?! ([A-zA-Z0-9 \ - \.] * * phys \ .org))
Dave Burton
Cinta sedikit nakal regex. Terima kasih telah mempostingnya.
burung camar
1

Meskipun ini adalah addon Firefox, NoScript memungkinkan Anda untuk memblokir JavaScript dari situs web mana pun dengan mengatur daftar yang tidak terpercaya.

non-teroris
sumber
2
Terima kasih atas jawabannya, tetapi ini bukan yang saya butuhkan. (Saya ingin sesuatu yang tidak merusak JavaScript di mana-mana di situs.) Saya akan mengedit pertanyaan lebih spesifik.
Jess Riedel
1

Jika Anda mencari cara untuk memodifikasi HTML secara otomatis sebelum ditampilkan, maka Greasemonkey adalah alatnya, dan Anda perlu membuat skrip pengguna yang melakukan modifikasi.

Dari artikel Panduan Pemula untuk Script Greasemonkey di Google Chrome :

Chrome sekarang secara alami mendukung skrip pengguna. Anda tidak perlu menginstal ekstensi tambahan untuk menggunakannya; pada kenyataannya, Chrome memperlakukan setiap skrip pengguna sebagai tambahan individual sehingga Anda dapat dengan mudah mengelola dan menghapusnya.

Ada banyak informasi tentang Greasemonkey yang dapat ditemukan di Internet, termasuk banyak tutorial. Kebanyakan dari mereka adalah untuk Firefox, tempat Greasemonkey berasal, tetapi mereka juga berlaku hari ini untuk Chrome.

Sebagai situs yang bertanggung jawab untuk "Baca lebih lanjut" adalah sharethis.com. Jika Anda memblokirnya, ini harus berhenti. Jika Anda memiliki suite keamanan yang diinstal, gunakan untuk memblokir situs. Kalau tidak, Anda dapat memblokirnya menggunakan file host Anda .

sharethis.comadalah penyedia yang memasok Tynt ke dua situs web yang Anda berikan kepada saya. Tynt tampaknya lebih merupakan teknologi daripada situs web, jadi tentu saja mungkin ada penyedia lain, Tapi kita harus berharap bahwa mereka akan agak jarang.

harrymc
sumber
Ok terima kasih. Pada prinsipnya apa saja di situs web dapat diperbaiki jika seseorang menerapkan skrip greasemonkey. (Setidaknya, saya kira masalah JavaScript dapat diperbaiki dengan lebih banyak JavaScript.) Untuk menerima jawaban ini sebagai hadiah, saya membutuhkan lebih banyak info tentang cara mengimplementasikannya.
Jess Riedel
Info macam apa? Anda dapat mulai dengan wikipedia yang memberikan tautan paling penting termasuk wiki dan userscripts.org .
harrymc
Katakanlah, penjelasan tentang bagaimana implementasi non-Tynt bekerja dan apa yang sebenarnya akan dilakukan tentang mereka? Sejauh ini tidak ada yang Anda tulis yang khusus untuk masalah salin-tempel ini (bukan JavaScript pada umumnya).
Jess Riedel
Saya belum pernah bertemu Tynt (tidak heran sejak saya menggunakan NoScript). Dari dua situs web contoh dalam artikel yang Anda tautkan, satu telah menghilang dan yang lainnya tidak menggunakan Tynt lagi. Apakah kamu punya contoh?
harrymc
Saya telah mengedit untuk menambahkan dua contoh situs web yang terus memiliki perilaku ini bahkan ketika saya menggunakan ekstensi pemblokiran Tynt.
Jess Riedel
1

Di Chromium saya berhasil dengan ekstensi Klik & Salin Absolute Aktifkan .

Setelah menginstalnya, Anda dapat menambahkan daftar situs pengguna tempat ekstensi diaktifkan di preferensi. Atau, ketika Anda berada di halaman tertentu dan melihat bahwa itu merusak clipboard Anda, Anda dapat mengaktifkan ekstensi ini dengan cepat melalui tombol bilah alat (ini secara otomatis menambahkan situs ke daftar Anda).

Ruslan
sumber
0

Atau, gunakan ekstensi "Salin sebagai Teks Biasa" untuk Chrome. Anda kemudian memiliki opsi tambahan dalam menu selain penyalinan normal. Ini memiliki kelebihan yang berfungsi di Chrome dan tidak merusak apa pun. https://chrome.google.com/webstore/detail/copy-as-plain-text-amazin/mkkcgjeddgdnikkeoinjgbocghokolck?utm_source=chrome-app-launcher-info-dialog

Julian
sumber
Dari namanya, Anda akan berpikir itu merusak menyalin teks yang diformat? Itu terkadang bermanfaat bagi sebagian orang.
Conrad Meyer