我可以为DOM节点添加或删除事件处理程序。是否可能找出给定DOM节点的所有已注册事件处理程序? 我所指的是纯JavaScript,不使用任何框架或工具包,例如jQuery,dojo,Prototype,GWT等。 如果答案是否定的,有没有任何原因? 安全问题吗?
我可以为DOM节点添加或删除事件处理程序。是否可能找出给定DOM节点的所有已注册事件处理程序? 我所指的是纯JavaScript,不使用任何框架或工具包,例如jQuery,dojo,Prototype,GWT等。 如果答案是否定的,有没有任何原因? 安全问题吗?
我知道这是一个老问题,但是以防万一,对于Google Chrome浏览器,您可以使用 getEventListeners 函数。
如此处所述:
在这里提到:
DOM Level 3规定了eventListenerList,但我不知道有任何支持此功能的DOM实现或其他可靠的列出事件侦听器的方法。到目前为止,这似乎是一种疏忽。
以下方法适用于Chrome/Safari的控制台:
getEventListeners(document.getElementByID('myElementId'));
Visual Event 可以显示哪些事件已经注册,但它只适用于 DOM Level 0 附加事件;W3C Level 2 实现以及 Internet Explorer 的专有方法不受支持和/或无法检索。
我遇到了同样的问题,来到这里,但没有找到有用的答案。
如果你能在其他方调用 addEventListener
之前执行脚本,你可以做一些非常不好的事情,比如:
var obj = something; // Your DOM element you want to watch
var beforeAddEvent = obj.addEventListener;
obj.addEventListener = function() {
// Do something with arguments here (like storing in an array)
// arguments[0]: event name
// arguments[1]: Listener function
// arguments[3]: eventual options passed
// If you don't call this, the event listener won't even be attached, it might be also useful in some case
beforeAddEvent.apply(obj, arguments);
};