ArsenBespalov
@ArsenBespalov
Сам себе разработчик

Можно ли что-либо добавить внутрь анонимной функции извне?

Необходимо удалить событие на копирование, но слушатель навешан внутри анонимной функции
$(function() {
    function addLink() {
        // ..code
    }
    document.addEventListener('copy', addLink);
});


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

С сайта необходимо копировать много материала, такова задача заказчика, владелец сайта не против, если кому будет интересно, но вот эта богомерзкая функция грабит всю разметку и делает из скопированного текста массу из простого текста и припиской о том, что материал скопирован с их сайта.

Собственно есть ли варианты избавиться от этого?

Копировать через консоль разработчика можно, но это не удобно. Копировать из исходников также не очень удобно.
  • Вопрос задан
  • 265 просмотров
Решения вопроса 2
Stalker_RED
@Stalker_RED
А модифицировать то место где она навешиваетеся вы не можете? Попробуйте removeEventListener, но для этого нужна ссылка на addLink.

UPD:
Можно перехватить событие другим обработчиком, с более высоким приоритетом
document.addEventListener('copy', e=>e.stopPropagation(), true);

Пример

Почему это работает: www.quirksmode.org/js/events_order.html#link4
Ответ написан
ArsenBespalov
@ArsenBespalov Автор вопроса
Сам себе разработчик
Сделал расширение для Google Chrome по мотивам данного вопроса:
https://chrome.google.com/webstore/search/truecopy...

Не нужно постоянно вводить в консоль разработчика ничего.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vshvydky
Я тут подумал и придумал некую гадкую штуку.
Скрипт нужно добавить в прелоад браузера или , если вы ловите события на своем сайте, но от модулей, то до вызова скриптов этих модулей:
(()=>{
if(!window.calls) window.calls = [];
let defoultAddEventListener = addEventListener
addEventListener = (event, callfunk, param)=>{
    let elem = this;
    window.calls.push({event, callfunk, elem});
    return defoultAddEventListener.call(this, event, callfunk, param);
};
})();

В результате вы получите массив объектов в window.calls, где будут содержаться ссылки на нужные вам функции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы