Как заблокировать пользовательскую функцию для события копирования в JS?

Arsen Bespalov

Есть сайт, на котором при копировании срабатывает пользовательская функция, которая добавляет к скопированному тексту дополнительный текст, а также убивает всю разметку, сливая все абзацы в один сплошной текст, теряя при этом заголовки и т.п.

Возможно ли как-нибудь запретить выполнение пользовательской функции для события копирования. Ну или после загрузки всего сайта хотя бы выполнить document.removeEventListener('copy', addLink);

Из консоли разработчика выполнить не получится, т.к. ранее привязка была сделана внутри анонимной функции jQuery: $(function() { ... document.addEventListener('copy', addLink); ... function addLink() { .. } }.

Буду благодарен за подсказку.

1 ответ

Arsen Bespalov

Вставить код в консоль разработчика и все будет работать:

document.addEventListener('copy', e => e.stopPropagation(), true);

Здесь используется назначение обработчика на стадию захвата. Обработчики этой стадии вызываются первыми, раньше чем обработчики дочерних элементов или стадии всплытия. После перехвата события его распространение останавливается при помощи метода stopPropagation(), отменяя остальные обработчики.

Работать это будет для всех случаев, если только страница сама не назначила обработчик стадии захвата для документа целиком.

Для ленивых сделал расширение для Google Chrome, пока только для него, но может пригодится для таких случаев:

https://chrome.google.com/webstore/search/truecopy?hl=ru

licensed under cc by-sa 3.0 with attribution.