я могу программно изучить и изменить обработчики событий Javascript для элементов HTML? - PullRequest
4 голосов
/ 17 сентября 2009

Я занимаюсь автоматизацией браузера с использованием C #, и я хотел бы изменить или, возможно, просто исключить обработчики событий для некоторых элементов HTML на веб-страницах, которые я просматриваю. Например, предположим, что там есть кнопка, которая может (или не может) иметь прикрепленное событие onClick. Как мне поступить: узнать, есть ли какие-либо обработчики событий, прикрепленные к onClick для этого? - удаляя их?

Ответы [ 3 ]

3 голосов
/ 17 сентября 2009

Замена элемента собственным клоном должна эффективно отбросить всех слушателей его событий (ну, технически слушатели все еще находятся в элементе, но поскольку элемент заменен своим собственным клоном, выглядит так, как будто слушатели были просто удалены):

el.parentNode.replaceChild(el.cloneNode(true), el);

К сожалению, в IE это не сработает, поскольку IE ошибочно передает прослушиватели событий элемента на клон. Чтобы обойти это, вы можете переназначить innerHTML элементов parentNode:

el.parentNode.innerHTML = el.parentNode.innerHTML;

Обратите внимание, что при этом будут удалены не только прослушиватели событий элемента, но и прослушиватели всех родственных элементов элемента.

Кроме того, вы можете обойти проблему с IE, переназначив outerHTML элемента:

el.outerHTML = el.outerHTML;
1 голос
/ 17 сентября 2009

Это зависит от того, как обработчики событий были присоединены к элементу.

Если они присоединены с использованием addEventListener или одного из проприетарных методов addWh независимо от прослушивателя, их список не существует.

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

Есть и третий путь:

Вы можете переопределить поведение addEventHandler / addListener по умолчанию, если код, который вы автоматизируете, использует их. Сделав это, вы можете заменить поведение по умолчанию на поведение, которое помещает каждый обработчик в массив, который затем можно зациклить на себе.

Может работать следующий код:

var oldAddEventListener = HTMLElement.prototype.addEventListener;
HTMLElement.prototype.addEventListener = function(event, handler, bubbling) {
    /* do whatever you want with event parameters */

    oldAddEventListener.call(this, event, handler, bubbling);
}
0 голосов
/ 17 сентября 2009

Насколько я знаю, в настоящее время невозможно использовать javascript для подключения всех обработчиков событий к элементу.

См. Эту ссылку для получения дополнительной информации:

http://www.howtocreate.co.uk/tutorials/javascript/domevents

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...