如何使用 JavaScript 在 DOM 节点上查找事件侦听器

How to find event listeners on a DOM node using JavaScript

本文关键字:查找 事件 侦听器 节点 DOM 何使用 JavaScript      更新时间:2023-09-26

我仍然无法相信这是不可能的,但是有没有办法循环访问dom并使用"addEventListener"查看所有附加的事件处理程序。这篇文章和许多其他帖子都说不。

如果是这种情况,那么像Chrome的检查器或Firebug这样的应用程序如何显示它们,它们确实如此?我想他们可能会以某种方式增强 dom 的方法,以便他们可以跟踪绑定的内容。

Chrome 的控制台有一个方法可以帮助您检查 dom 节点是否注册了任何事件侦听器;例如,使用以下命令检查附加到文档节点的事件侦听器:

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

getEventListeners(document);

如果需要,您可以递归遍历所有 dom 节点并找到附加的所有事件处理程序。

当然,浏览器内部有一个事件侦听器列表,但它不会暴露给页面级 JavaScript。例如,Firebug(或Eventbug)可能使用nsIEventListenerInfo。

话虽如此,这个古老的答案仍然成立:
如何在 DOM 节点上查找事件侦听器?

使用以下函数获取已注册事件的 json;

getEventListeners(node_name);其中node_name可以是元素名称或其 ID。

在Chrome v53控制台上,我尝试过:

getEventListeners(document);

返回:

__proto__: Object

和子元素,而不是我要找的。

所以我试过:

getEventListeners(window);

返回

Object {beforeunload: Array[1], load: Array[1]}

这就是我正在寻找的。所以我认为正确的方法是:

getEventListeners(myDomElement):

其中myDomElement是使用标准方式(如getElementById等)获得的目标对象...