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:config
dan 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:config
opsi.
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.com
domain. 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 hosts
file:
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 Selection
API 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 @include
arahan. 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 Selection
s 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 disableSelections
yang menggantikan default document.getSelection
dan window.getSelection
fungsi dengan yang hanya mengembalikan objek yang mengandung { isCollapsed: true }
. Mengapa? Karena ShareThis (saya memeriksa dalam kode JS mereka) memanggil fungsi itu dan memeriksa apakah isCollapsed
properti 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 Selection
objek.
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 addEventListener
fungsi 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.getSelection
fungsi 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.