30

Есть много сайтов, которые вставляют что-то вроде «Read more: www.site.com» в буфер обмена, когда вы копируете текст в браузере. Я считаю это отвратительным. Поиск Google показывает некоторые методы, чтобы остановить это, если веб-сайт использует службу Tynt (просто блокируя домен Tynt), но многие веб-сайты используют собственный JavaScript.

Есть ли общий способ заблокировать это поведение, кроме простого отключения JavaScript? Я использую Chrome, но меня интересуют все решения.

РЕДАКТИРОВАТЬ: Чтобы быть ясным, я хочу быть в состоянии сохранить остальные функции JavaScript для этих сайтов, так как многие обойдутся без него.

РЕДАКТИРОВАТЬ # 2: Вот два примера веб-сайтов, которые продолжают преследовать меня, несмотря на то, что я использую блокировщик Tynt: Marginal Revolution | Фискальные времена

Вот два вопроса StackOverflow и два поста в блоге, в которых объясняется, как реализовать эту теневую практику вручную без использования Tynt. Вот сообщение в блоге, описывающее, как трудно это надежно блокировать. Вот последнее обсуждение, которое я смог найти (март 2013 г.), в котором предлагаются предложения о том, как заблокировать это в Chrome с помощью AdBlock, но у меня это не сработало.

5 ответов5

24

Сайт, добавляющий раздражающий материал "Читать дальше", - ShareThis.

Чтобы предотвратить это плохое поведение, у вас есть три различных варианта:

Отключить события буфера обмена

Эти веб-сайты используют API-интерфейсы Clipboard, которые позволяют веб-разработчикам перехватывать действия копирования / вырезания / вставки и выполнять некоторый код при их выполнении. Вот как работает 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

Третий вариант - самый сложный, и его следует использовать только в качестве крайней меры.

Отключить функцию выбора на проблемных сайтах

Для редактирования содержимого, которое копируется в буфер обмена, эти веб-сайты используют API Selection который позволяет им редактировать выборки на лету. Таким образом, решение состоит в том, чтобы полностью отключить любой вид 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 используются совершенно законными веб-сайтами (например, текстовые поля StackExchange используют их для вставки символа, когда вы нажимаете на кнопку, в положение вашей каретки), поэтому вам следует включить этот пользовательский скрипт только на проблемных сайтах

(обратите внимание, что вам может понадобиться удалить строки, начинающиеся с // если вы создаете скрипт пользователя из меню Greasemonkey/Tampermonkey, они автоматически добавят его)

Объяснение usercript довольно простое. Во-первых, он определяет функцию с именем disableSelections которая заменяет стандартные функции document.getSelection и window.getSelection функцию, которая просто возвращает объект, содержащий { isCollapsed: true } . Зачем? Потому что ShareThis (я проверил их код JS) вызывает эту функцию и проверяет, установлено ли для свойства isCollapsed значение true (если это так, он останавливает "отравление буфера обмена"). Другие веб-сайты, подобные этому, возможно, не будут выполнять эту проверку, но в результате просто вызовут ошибку, когда попытаются вызвать законную функцию объекта Selection .

Затем функция вводится в тело / заголовок / документ и будет автоматически выполняться. Вы можете задать вопрос: если Javascript позволяет переопределить (почти) каждую функцию, почему вы не переопределили функцию addEventListener чтобы просто ничего не делать, когда событие копируется / вырезается / вставляется? Ответ довольно прост. Пользовательский сценарий выполняется в непросто предсказуемое время, это означает, что Javascript ShareThis может быть загружен до пользовательского сценария, и он ничего не будет делать. Вместо этого, просто переопределив функцию window.getSelection не возникнет, поскольку эта функция вызывается только при выполнении копирования, и мы на 100% уверены, что при копировании текста пользовательский скрипт уже загружен.

Заключение

Лучшее и самое чистое решение, очевидно, первое, поскольку оно отключает практически бесполезный API.

Второй также действителен, но вы потеряете любую функцию ShareThis.

Третий - самый "взломанный", но в крайнем случае он может сработать.

2

Эти одиозные действия можно заблокировать в Chrome с помощью расширения "Убить зло":

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

(РЕДАКТИРОВАТЬ) Это расширение, кажется, вызывает странные проблемы на Facebook, обязательно внесите его в белый список.

1

Если вы ищете способ автоматического изменения HTML-кода перед его отображением, то Greasemonkey - это инструмент, и вам нужно будет создать пользовательский скрипт, который выполняет изменение.

Из статьи Руководство для начинающих для скриптов Greasemonkey в Google Chrome :

Chrome теперь изначально поддерживает пользовательские скрипты. Вам не нужно устанавливать дополнительное расширение, чтобы использовать их; фактически Chrome рассматривает каждый пользовательский скрипт как отдельное дополнение, поэтому вы можете легко управлять и удалять их.

В Интернете можно найти много информации о Greasemonkey, в том числе множество учебных пособий. Большинство из них были бы для Firefox, где возникла Greasemonkey, но они также применяются сегодня к Chrome.

Ответственным за "Читать дальше" является сайт sharethis.com . Если вы заблокируете это, это должно прекратиться. Если у вас установлен пакет безопасности, используйте его для блокировки сайта. В противном случае вы можете заблокировать его, используя файл hosts .

sharethis.com - поставщик, который поставляет Tynt на два сайта, которые вы мне дали. Tynt выглядит скорее технологией, чем веб-сайтом, поэтому, конечно, могут быть и другие подобные провайдеры, но нужно надеяться, что они будут довольно редкими.

1

Хотя это дополнение к Firefox, NoScript позволяет блокировать JavaScript с любого веб-сайта, создав ненадежный список.

0

Также можно использовать расширение "Копировать как обычный текст" для Chrome. Затем у вас есть дополнительная опция в меню, кроме обычного копирования. С другой стороны, он работает в Chrome и ничего не ломает. https://chrome.google.com/webstore/detail/copy-as-plain-text-amazin/mkkcgjeddgdnikkeoinjgbocghokolck?utm_source=chrome-app-launcher-info-dialog

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .