我们希望使用浏览器扩展向现有页面添加功能。假设一个元素已经具有绑定到其 onclick 事件的函数。我正在将一个新函数绑定到该元素的 onclick。我想让我的函数在之前绑定到该事件的所有其他函数之前运行。在我的函数完成运行之前,我不希望它们开始执行。
我想知道如何在 JavaScript 中以这种方式绑定我的新函数。
我们希望使用浏览器扩展向现有页面添加功能。假设一个元素已经具有绑定到其 onclick 事件的函数。我正在将一个新函数绑定到该元素的 onclick。我想让我的函数在之前绑定到该事件的所有其他函数之前运行。在我的函数完成运行之前,我不希望它们开始执行。
我想知道如何在 JavaScript 中以这种方式绑定我的新函数。
你真的不能。事件侦听器通常按照它们附加到元素的顺序执行,您无法获取那些已经添加的。如果您的插件不会在任何其他添加侦听器的代码之前执行,那么您唯一的机会就是尽早进入事件调度过程。
我能想到的最好方法是在 dom 的最高点为捕获阶段添加一个侦听器:
document.documentElement.addEventListener("click", function(e) {
if (e.target == theElementInQuestion) // or check for e.target.id...
// do something with the event like
e.stopImmediatePropagation();
}, true /* sic! */);