有什么方法可以查看DOM元素的事件附加了哪些函数/代码?使用Firebug或任何其他工具。
有什么方法可以查看DOM元素的事件附加了哪些函数/代码?使用Firebug或任何其他工具。
Answers:
使用传统element.onclick= handler
或HTML 附加的事件处理程序<element onclick="handler">
可以element.onclick
从脚本或调试器中的属性中轻松检索。
使用DOM Level 2事件addEventListener
方法和IE 附加的事件处理程序attachEvent
目前根本无法从脚本中检索。DOM Level 3曾经提出element.eventListenerList
要获取所有侦听器,但是目前尚不清楚这是否符合最终规范。今天,任何浏览器都没有实现。
作为浏览器扩展的调试工具可以访问这些类型的侦听器,但我不知道实际上有任何侦听器。
一些JS框架留下了足够的事件绑定记录,以计算出它们所做的工作。Visual Event采用这种方法来发现通过一些流行框架注册的侦听器。
自2011年中发布Chrome以来,自2010年以来发布了Chrome开发者渠道,Google Chrome开发者工具中的Elements Panel便具有此功能。
同样,为选定节点显示的事件侦听器的顺序是,它们在捕获和冒泡阶段中被触发。
命中command+ option+ i在Mac OSX和Ctrl+ Shift+ i在Windows上的Chrome火这件事
window
对象上的message
事件,例如事件?
Chrome Dev Tools最近宣布了一些用于监视JavaScript事件的新工具。
TL; DR
使用收听特定类型的事件
monitorEvents()
。使用
unmonitorEvents()
停止监听。使用来获取DOM元素的侦听器
getEventListeners()
。使用“事件侦听器”检查器面板获取有关事件侦听器的信息。
查找自定义事件
对于我的需求,在第3方代码中发现自定义JS事件,以下的两个版本getEventListeners()
非常有用。
getEventListeners(window)
getEventListeners(document)
如果您知道将事件侦听器附加到哪个DOM节点,则将其传递给而不是window
or document
。
已知事件
如果您知道要监视的事件(例如click
在文档正文上),则可以使用以下命令:monitorEvents(document.body, 'click');
。
现在,您应该开始document.body
在控制台中看到正在记录的所有单击事件。
您可以使用Allan Jardine的Visual Event来检查页面上几个主要JavaScript库中所有当前附加的事件处理程序。它适用于jQuery,YUI和其他几种。
视觉事件是JavaScript书签,因此与所有主要浏览器兼容。
您可以扩展JavaScript环境,以跟踪事件侦听器。用一些代码包装(或“重载”)本地addEventListener()方法,该代码可以保留从那时起添加的任何事件侦听器的记录。您还必须扩展HTMLElement.prototype.removeEventListener,以保留能够准确反映DOM中发生的情况的记录。
仅出于说明目的(未经测试的代码)-这是一个示例,说明如何“包装” addEventListener以在对象本身上具有已注册事件侦听器的记录:
var nativeMethod = HTMLElement.prototype.addEventListener;
HTMLElement.prototype.addEventListener = function (type, listener) {
var el = e.currentTarget;
if(!(el.eventListeners instanceof Array)) { el.eventListeners = []}
el.eventListeners.push({'type':type, 'listener':listener});
nativeMethod.call(el, type, listener);
}