На сайті, який додає дратівливих матеріалів "Читати далі", це 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
Третє рішення - найскладніше, і його слід використовувати лише в крайньому випадку.
Вимкніть функцію вибору на проблемних веб-сайтах
Для редагування вмісту, скопійованого в буфер обміну, на цих веб-сайтах використовується Selection
API, який дозволяє їм редагувати виділення на ходу. Отже, рішення - повністю відключити будь-який тип 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/
.
Я перевірив це на обох веб-сайтах, які ви пов’язали, і він працює без проблем. Однак майте на увазі, що це може спричинити проблеми, оскільки Selection
s використовуються ідеально законними веб-сайтами (наприклад, текстові поля StackExchange використовують їх для вставки символу при натисканні на кнопку в положення вашої карети), тому вам слід увімкнути що користувач сценарій лише на проблемних веб-сайтах.
(зауважте, що вам може знадобитися видалити рядки, починаючи з того, //
якщо ви створюєте користувацький сценарій із меню Greasemonkey / Tampermonkey, вони автоматично додадуть його)
Пояснення користувацького сценарію досить просте. По-перше, він визначає функцію з назвою, disableSelections
яка замінює за замовчуванням document.getSelection
і window.getSelection
функції на ту, яка просто повертає об'єкт, що містить { isCollapsed: true }
. Чому? Оскільки ShareThis (я перевірив їхній JS-код) викликає цю функцію та перевіряє, чи встановлено isCollapsed
властивість true
(якщо воно є, воно зупиняє "отруєння буфера обміну"). Інші подібні веб-сайти, можливо, не виконають цю перевірку, але вони виявляться просто помилкою при спробі викликати законну функцію Selection
об'єкта.
Потім функція вводиться в тіло / заголовок / документ, і вона буде автоматично виконуватися. Питання, яке ви можете задати, таке: якщо Javascript дозволяє переосмислити (майже) кожну функцію, чому ви не замінили addEventListener
функцію просто нічого не робити, коли подія копіює / вирізає / вставляє? Відповідь досить проста. Користувальний сценарій виконується в непросто передбачуваний час, це означає, що ShareThis Javascript можна завантажити перед користувачем, і він нічого не зробить. Натомість, просто скасувавши window.getSelection
функцію, не виникне жодних проблем, оскільки ця функція викликається лише тоді, коли виконується копія, і ми на 100% впевнені, що при копіюванні тексту користувальницький сценарій вже завантажений.
Висновок
Найкраще і найчистіше рішення, очевидно, перше, оскільки воно вимикає практично марний API.
Другий теж дійсний, але ви втратите будь-яку функціональність ShareThis.
Третій - самий "хакітний", але в крайньому випадку це може спрацювати.