【问题标题】:How do I get a list of all GlobalEventHandlers?如何获取所有 GlobalEventHandlers 的列表?
【发布时间】:2018-03-30 11:56:49
【问题描述】:

https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers

如何获取 GlobalEventHandlers 的所有属性的列表?

具体来说,我想测试传递的字符串是否是 GlobalEventHandlers 的属性,例如:

console.log(GlobalEventHandlers.includes('onClick')); // true
console.log(GlobalEventHandlers.includes('fizzBuzz')); // false

【问题讨论】:

  • 看看这里可能会有所帮助stackoverflow.com/questions/1475337/…
  • 感谢@LGSon,这似乎是相关的,但不幸的是无法解决我的问题
  • 你试过for.... in循环吗?
  • 嗯,根据文档建立列表??
  • @JO3-W3B-D3V 我的问题是我会循环什么?一旦我有了包含所有 GlobalEventHandlers 的对象/数组,那么当然可以循环遍历它们。

标签: javascript event-handling


【解决方案1】:

获得所有这些的唯一真正方法是自己构建列表,但您可以遍历窗口对象中的键并查找以 on 开头的键

Object.keys(window).filter(k => !k.indexOf('on'))

但它不会只返回内置的。如果有人设置了自定义事件侦听器,例如

window.onfoobar = function () {}

这也会显示在结果中。

【讨论】:

  • 谢谢,我认为这对我的用例来说会起作用。我可以做if (Object.keys(window).includes(key.toLowerCase())),因为我使用的是反应,我有onClick而不是onclick
  • @EdmundReed 但这意味着有人可以使用非事件的东西,它会被视为事件....又名frames, innerHeight, etc
【解决方案2】:

我为你写了一个 npm 包。

完整使用和安装:global-event-handlers-map.

它提取存在于window(包括window)下的每个对象下的每个全局事件处理程序。

例如,通过调用:

const getGlobalEventsHandlersMap = require('global-event-handlers-map');

const gehsMap = getGlobalEventsHandlersMap('WebSocket');

您将得到以下结果(gehsMap 将是):

{
  "WebSocket": [
    "onopen",
    "onerror",
    "onclose",
    "onmessage"
  ]
}

通过不带参数调用getGlobalEventsHandlersMap(),您将收到所有全局事件处理程序。

README 文件应该非常具有指示性,应该可以帮助您了解如何从该软件包中获取所需的一切。

你可以:

  1. 在浏览器中执行一次代码,获取结果,然后在代码中静态使用该映射。

  2. 将库集成到您的代码中,从而在您的代码每次在浏览器中运行时动态创建地图。

最好的方法取决于您的需求,应该是您的电话。我可以帮助您了解哪种方式最适合您,这取决于您的需求。

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2013-06-15
    • 2021-06-26
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    相关资源
    最近更新 更多