我仍然无法相信这是不可能的,但有没有办法循环遍历 dom 并查看使用“addEventListener”附加的所有事件处理程序。这篇文章和许多其他人说不。
如果是这样的话,那么像 Chrome 的检查器或 Firebug 这样的应用程序如何显示它们,它们会做什么?我猜他们可能会以某种方式增强 dom 的方法,以便他们可以跟踪绑定的内容。
我仍然无法相信这是不可能的,但有没有办法循环遍历 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 节点上找到事件侦听器?
在 Chrome v53 控制台上,我尝试过:
getEventListeners(document);
返回:
__proto__: Object
和子元素,不是我要找的。
所以我试过:
getEventListeners(window);
返回
Object {beforeunload: Array[1], load: Array[1]}
这就是我要找的。所以我认为正确的做法是:
getEventListeners(myDomElement):
其中myDomElement是通过getElementById 等标准方法获得的目标对象......
使用以下函数获取已注册事件的 json;
getEventListeners(node_name);
wherenode_name
可以是元素名称或其 id。