Подтвердить что ты не робот

Как найти прослушивателей событий на DOM node с помощью JavaScript

Я по-прежнему не могу поверить, что это невозможно, но есть способ перебирать dom и видеть все обработчики событий с помощью 'addEventListener'. Этот пост и многие другие говорят "нет".

Если это так, то как показывают такие приложения, как инспектор Chrome или Firebug, что они делают? Я думаю, они, вероятно, каким-то образом дополняют методы dom, чтобы они могли отслеживать, что связано.

4b9b3361

Ответ 1

Конечно, у браузеров внутри есть список прослушивателей событий, но он не подвергается JavaScript на уровне страницы. Например, Firebug (или Eventbug), вероятно, используйте nsIEventListenerInfo.

Как говорится, этот старый ответ по-прежнему сохраняется:
Как найти прослушивателей событий на DOM node?

Ответ 2

Консоль Chrome имеет метод, который может помочь вам проверить, зарегистрирован ли в dom node прослушиватели событий, например, чтобы проверить прослушиватели событий, прикрепленные к документу node, используя:

https://developers.google.com/chrome-developer-tools/docs/commandline-api#geteventlistenersobject

getEventListeners(document);

Вы можете рекурсивно перебирать все вершины dom и находить при необходимости все обработчики событий.

Ответ 3

В консоли Chrome v53 я попытался:

getEventListeners (документ);

который возвращает:

__ proto__: Object

и вспомогательные элементы, а не то, что я ищу.

Итак, я пробовал:

getEventListeners (окно);

который возвращает

Объект {beforeunload: Array [1], load: Array [1]}

Вот что я ищу. Поэтому я считаю, что правильный подход - это Робин, как птичий путь:

getEventListeners (myDomElement):

где myDomElement - это целевой объект, полученный стандартными способами, такими как getElementById и т.д.

Ответ 4

используйте следующую функцию для извлечения json зарегистрированных событий;

getEventListeners (node_name); где node_name может быть именем элемента или его идентификатором.