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

lrpiutwd  于 2023-06-19  发布在  Go
关注(0)|答案(1)|浏览(177)

基本上,我正在做一个扩展,提供基于页面元素的分析。由于元素的总数通常超过5,000,但与点击事件相关的元素(我唯一关心的元素)通常小于50,所以如果我可以将焦点缩小到我感兴趣的元素,这将是一个很大的性能方面的好处。Chrome的devtools函数getEventListeners()正是我所追求的,当然,它只在Chrome控制台中工作。在我看来,在Chrome扩展中一定有一种方法可以做到这一点,这似乎是合乎逻辑的。纯JS显然更好,但现在我的范围仅限于单个Chrome扩展,任何在那里工作的东西都可以完成这项工作。
谢谢!

avwztpqn

avwztpqn1#

好了,基本上你可以像这样重新构建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);
};

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

相关问题