Снять ивент с элемента не имея доступа к функции-хэндлеру
Всем доброго времени суток.
Вновь вынужден обратиться сюда за помощью. Имеется следующий код: (function(){ var el = document.getElementById("text_input"); el.onpaste = el.ondrop = el.oncontextmenu = M; function M(){ return false; } })(); Задача - разрешить контекстное меню и копипаст (снять блокирующие ивенты). Изюминка в том, что редактировать данный код нельзя, поскольку я пишу клиентский плагин, который подключается к странице, а доступа к серверу нет. Можно лишь добавить код к имеющемуся, но из-за того что он заключен в функцию, доступа к M() чтобы воспользоваться removeEventListener нет. Переопределить функцию через .oncontextmenu тоже не получилось. Была идея с клонированием элемента и удалением старого, это снимет с него все ивенты, но кроме блокирующих на нём висит еще несколько установленных таким же образом, которые необходимо оставить. Что подскажете? |
var el = document.getElementById("text_input"); el.onpaste = el.ondrop = el.oncontextmenu = null; |
Octane,
Это было первым, что я попробовал :) Но эффекта никакого не дало, предыдущий ивент все равно висит. |
А точно твой скрипт выполняется позже? Если там через addEventListener еще такой же обработчик добавлен где-нибудь, то никак не уберешь.
|
Цитата:
Хотя, если вы работаете через userscript, а не изнутри плагина\букмарклета то у вас действительно может не быть доступа к событиям навешанным таким образом. Навряд ли конечно, но попробуйте на всякий: .removeAttribute("onpaste") итд. Цитата:
Или вообще по-хардкору - грузить отредактированную версию скрипта вместо оригинального. |
для этого достаточно переопределить функцию написав
function M() {}; <div id="text_input">Contex tmenu</div> <script> (function () { var el = document.getElementById("text_input"); el.onpaste = el.ondrop = el.oncontextmenu = M; function M() { alert('M'); } })(); </script> <script> (function () { var el = document.getElementById("text_input"); el.onpaste = el.ondrop = el.oncontextmenu = M; function M() {}; //если закомментируете выведет M })(); </script> |
Часовой пояс GMT +3, время: 18:36. |