我正在尝试调试一个大量使用事件的网页,因此我需要监视所有触发的事件。
大多数事件都是使用 jQuery 绑定的。因此,如果有一种方法可以专门监视这些事件,那就特别有用。
当然,您可以使用 Firebug、控制台和脚本选项卡,您可以在其中添加断点和监视,但显然您希望做得更智能/更简单。
有一个名为 EventBug 的简洁 Firebug 插件,它只记录所有事件并按事件类型对它们进行分组,以便您可以展开并查看触发它们的原因。
EventBug 不是实时执行的,但你必须刷新。
另一种方法是对 Firebug 中的任何 DOM 元素使用“日志事件”功能。这确实是实时执行的,您也可以看到触发/触发了哪些订单事件。
试试这个:
<body>
Log Events
Closed
(手动)这是您在日志事件中看到的内容:
还值得尝试 Firebug 的 FireQuery 插件,以查看 DOM 中的哪些元素附加了 jQuery 事件以及它们是什么。
正如 Benvie 的回答所提到的,这在 webkit 的开发者工具中也是可能的。
这已经在一些版本之前引入,但从 Firefox 35 开始,可以在检查器上看到与元素关联的事件:在您想要查看事件的元素旁边(如果有的话)将会有一个带有“EV”字母。单击它,您将看到一个小的弹出窗口,其中包含该元素的事件。
更多信息:http://flailingmonkey.com/view-dom-events-in-firefox-developer-tools/
Event Listener Breakpoints
已在 FF 69 中引入(并在 FF 71 中进一步改进)。相关文档位于此处。
它允许您自动中断给定类型的任何 event 事件侦听器。此屏幕截图(来自文章)显示了它如何在
Keyboard
事件中崩溃:
本文进一步解释了 (1) 如何避免每次都中断,而只是
log
匹配事件,以及 (2) 如何黑箱某些源,以避免必须费力地浏览框架代码的内部(例如 jquery
、react
等)。
他们提供了另一个屏幕截图:
我认为 Firebug 中不存在这种情况,其根本问题是缺乏支持或缺乏 api 级别的暴露。或者,只有几种方法可以订阅 DOM 事件:除了可观察和可拦截的“oneevent”属性之外,还有 Element.prototype.addEventListener(以及 window.addEventListener 和 document.addEventListener 和 XMLHttpRequest.addEventListener 等)。
但实际上,WebKit 调试器和 Chromium 的调试器(Webkit 的调试器有额外的优点)允许人们调试和观察附加的侦听器。有时,即使该浏览器没有表现出错误,在另一种浏览器中调试一个浏览器的错误也更容易,并且可以更好地暴露应用程序/运行时状态。
https://developers.google.com/chrome-developer-tools/docs/elements