javascript - 如何知道页面上有多少个事件监听器

标签 javascript

我正在用 Javascript 构建一个相当大的应用程序。它是一个可以改变不同 View 的页面。所有 View 都有自己的变量、事件、监听器、元素等。

在处理大型集合和多个事件时,有时最好了解页面上到底发生了什么。

我知道所有浏览器都有开发者工具,但有时很难点击所有元素等。还有一些选项我找不到。

我感兴趣的一件事是了解当前在页面上监听了多少事件。这样我就可以确认我没有在制造僵尸。

如果解决方案是开发人员工具,请告诉我在哪里查看以及如何操作。最重要的是,选择哪种浏览器。

最佳答案

只需使用 API getEventListeners 即可获取所有事件的信息。请参阅此链接 Chrome Dev Tools : view all event listeners used in the page

The content of this answer:

Chrome Devtool 无法为您完成此操作。但是您可以使用 chrome 提供的 API 检查控制台中的那些:getEventListeners

只需将此代码放在开发工具的控制台中,您就可以获取页面中所有绑定(bind)的点击事件数:

Array.from(document.querySelectorAll('*'))
  .reduce(function(pre, dom){
    var clks = getEventListeners(dom).click;
    pre += clks ? clks.length || 0 : 0;
    return pre
  }, 0)

结果是这样的:

3249

那里有很多点击绑定(bind)。绝对不是性能项目的好例子。

如果您想查看页面中的所有元素都绑定(bind)了哪些事件以及每个事件有多少监听器,只需将这些代码放入开发工具的控制台中即可:

Array.from(document.querySelectorAll('*'))
  .reduce(function(pre, dom){
    var evtObj = getEventListeners(dom)
    Object.keys(evtObj).forEach(function (evt) {
      if (typeof pre[evt] === 'undefined') {
        pre[evt] = 0
      }
      pre[evt] += evtObj[evt].length
    })
    return pre
  }, {})

结果是这样的:

{
  touchstart: 6,
  error: 2,
  click: 3249,
  longpress: 2997,
  tap: 2997,
  touchmove: 4,
  touchend: 4,
  touchcancel: 4,
  load: 1
}

您可以从此 API 获得许多其他信息。即兴创作。

关于javascript - 如何知道页面上有多少个事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10284120/

相关文章:

javascript - Dashcode webapp 在转换时闪烁,仅在 iPhone Safari 中

javascript - 在 typescript 的同一行导入和调用函数

javascript - NodeJS + Express 使用 fetch() : How to bypass "Your connection is not private" in Javascript?

javascript - 如何在 React Native 中调用函数

javascript - 关于浏览器如何解释 HTML/CSS/Javascript

javascript - 反向排序数组的 sortedIndex?

javascript - 访问回调 array.prototype 中的参数

javascript - 防止 DOM XSS

javascript - 附加或附加到,以及如何?

javascript - 出现 502 Bad Gateway 错误时自动刷新页面