有没有类似 getEventListeners 的方法可以用在 chrome 扩展甚至纯 JS 中?

jam*_*zyx 8 javascript google-chrome event-listener

基本上,我正在制作一个扩展,提供基于页面元素的分析。由于元素总数通常达到 > 5,000 个,但与它们关联的点击事件的元素(我唯一关心的元素)通常 < 50 个,如果我可以将焦点缩小到仅这些元素,那将对性能带来巨大的好处我很感兴趣。Chrome 的开发工具函数 getEventListeners() 正是我所追求的,当然,它只能在 Chrome 控制台中工作。对我来说,在 Chrome 扩展中一定有办法做到这一点似乎是合乎逻辑的?纯 JS 显然会更可取,但目前我的范围仅限于单个 Chrome 扩展,任何在那里工作的东西都可以完成这项工作。

谢谢!

小智 2

好吧,基本上你可以window.getEventListeners()像这样重新创建这个函数:

const { addEventListener: nativeAddEventListenerPrototype } = Document.prototype;
const activeListeners = new Set();

Document.prototype.addEventListener = function(...nativeArgumentsList) {
    activeListeners.add(nativeArgumentsList);

    void Reflect.apply(nativeAddEventListenerPrototype, this, nativeArgumentsList);
};
Run Code Online (Sandbox Code Playgroud)

只需确保在页面加载之前注入此代码,否则它将无法正确执行,然后基本上每次网站创建事件侦听器时,它都会存储在该集合中,以便您可以导航到每个侦听器并按照您的意愿进行操作。希望这可以帮助!