На сайті, який додає дратівливих матеріалів "Читати далі", це ShareThis.
Щоб запобігти цій поганій поведінці, у вас є три різні варіанти:
Вимкнення подій буфера обміну
Ці веб-сайти використовують API буфера обміну , що дозволяє веб-розробникам перехоплювати дії копіювання / вирізання / вставки та виконувати деякий код під час їх виконання. Так працює ShareThis (та інші подібні веб-сайти). Він просто чекає події копіювання і безпосередньо перед виконанням ефективної копії додає додатковий "шар" тексту, який містить дратує "- Дивіться ...".
Тепер питання: чи існує якийсь метод відключення подій буфера обміну? На жаль, мені не вдалося знайти спосіб зробити це в Chrome / Chromium, але в Firefox це можливо двома різними способами.
- Увійдіть
about:configі шукайте dom.event.clipboardevents.enabled. Двічі клацніть по клавіші (встановіть її false) і вуаля! Ви відключили події буфера обміну, і ніхто більше не торкнеться цього буфера обміну.
- Для старих версій Firefox (дійсно, дуже старших) є таке розширення, яке робить саме те саме, що є
about:configопцією.
Вимкнення подій буфера обміну не повинно завдати шкоди досвіду будь-якого веб-сайту, оскільки вони рідко використовуються і насправді не існує їхньої мети (крім спаму).
Перейдемо до другого рішення.
Блокувати ShareThis
Якщо вам не потрібен ShareThis, ви можете просто заблокувати w.sharethis.comдомен. Javascript, відповідальний за завантаження ShareThis (та реєстрацію його ClipboardEvent), завантажується з цього веб-сайту.
Ви можете заблокувати його різними способами, починаючи від простого фільтра AdBlock і редагуючи файл хостів (це не охоплено і не пов'язано, оскільки я не можу розміщувати більше посилань через свою репутацію).
Приклад виконання цього hostsфайлу:
127.0.0.1 w.sharethis.com
Третє рішення - найскладніше, і його слід використовувати лише в крайньому випадку.
Вимкніть функцію вибору на проблемних веб-сайтах
Для редагування вмісту, скопійованого в буфер обміну, на цих веб-сайтах використовується SelectionAPI, який дозволяє їм редагувати виділення на ходу. Отже, рішення - повністю відключити будь-який тип Selection(очевидно, на стороні коду. Ви все одно зможете виконувати вибір).
Це можна зробити за допомогою простого сценарію Tampermonkey / Greasemonkey. Я перевірив його лише на Firefox, оскільки зараз не можу встановити Chrome. Мені про це шкода.
Це вихідний код:
// ==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);
})();
Щоб дозволити цьому працювати, вам слід створити новий сценарій Greasemonkey / Tampermonkey і відкоригувати @includeдирективи. Ви можете розміщувати один веб-сайт на рядок, і це потрібно робити так @include http://bad.website.address/.
Я перевірив це на обох веб-сайтах, які ви пов’язали, і він працює без проблем. Однак майте на увазі, що це може спричинити проблеми, оскільки Selections використовуються ідеально законними веб-сайтами (наприклад, текстові поля StackExchange використовують їх для вставки символу при натисканні на кнопку в положення вашої карети), тому вам слід увімкнути що користувач сценарій лише на проблемних веб-сайтах.
(зауважте, що вам може знадобитися видалити рядки, починаючи з того, //якщо ви створюєте користувацький сценарій із меню Greasemonkey / Tampermonkey, вони автоматично додадуть його)
Пояснення користувацького сценарію досить просте. По-перше, він визначає функцію з назвою, disableSelectionsяка замінює за замовчуванням document.getSelectionі window.getSelectionфункції на ту, яка просто повертає об'єкт, що містить { isCollapsed: true }. Чому? Оскільки ShareThis (я перевірив їхній JS-код) викликає цю функцію та перевіряє, чи встановлено isCollapsedвластивість true(якщо воно є, воно зупиняє "отруєння буфера обміну"). Інші подібні веб-сайти, можливо, не виконають цю перевірку, але вони виявляться просто помилкою при спробі викликати законну функцію Selectionоб'єкта.
Потім функція вводиться в тіло / заголовок / документ, і вона буде автоматично виконуватися. Питання, яке ви можете задати, таке: якщо Javascript дозволяє переосмислити (майже) кожну функцію, чому ви не замінили addEventListenerфункцію просто нічого не робити, коли подія копіює / вирізає / вставляє? Відповідь досить проста. Користувальний сценарій виконується в непросто передбачуваний час, це означає, що ShareThis Javascript можна завантажити перед користувачем, і він нічого не зробить. Натомість, просто скасувавши window.getSelectionфункцію, не виникне жодних проблем, оскільки ця функція викликається лише тоді, коли виконується копія, і ми на 100% впевнені, що при копіюванні тексту користувальницький сценарій вже завантажений.
Висновок
Найкраще і найчистіше рішення, очевидно, перше, оскільки воно вимикає практично марний API.
Другий теж дійсний, але ви втратите будь-яку функціональність ShareThis.
Третій - самий "хакітний", але в крайньому випадку це може спрацювати.