Javascript 是否有任何方法可以抢占使用window.addEventListener创建的事件处理程序?

Javascript 是否有任何方法可以抢占使用window.addEventListener创建的事件处理程序?,javascript,Javascript,[编辑:添加有关场景的更多详细信息] 我正在创建一个工具,应用程序可以包括使用脚本标签;这个工具为他们的应用程序添加了一个覆盖图;该覆盖包括画布和我渲染到画布上的控件。我希望该工具能够捕获所有输入事件,并处理它们(如果在其中一个渲染控件上发生)并停止传播到应用程序,或者将它们传递到应用程序(如果没有在其中一个渲染控件上发生) 我能够抢占主机应用程序的所有输入事件,除非应用程序使用捕获在窗口上注册事件,如下所示: window.addEventListener("mousedown", (e) =

[编辑:添加有关场景的更多详细信息]

我正在创建一个工具,应用程序可以包括使用脚本标签;这个工具为他们的应用程序添加了一个覆盖图;该覆盖包括画布和我渲染到画布上的控件。我希望该工具能够捕获所有输入事件,并处理它们(如果在其中一个渲染控件上发生)并停止传播到应用程序,或者将它们传递到应用程序(如果没有在其中一个渲染控件上发生)

我能够抢占主机应用程序的所有输入事件,除非应用程序使用捕获在窗口上注册事件,如下所示:

window.addEventListener("mousedown", (e) => console.log("hi"), true);

我的工具是否有办法注入在此之前被调用的函数?

否。如果事件侦听器已在捕获阶段连接到
窗口,则无法在其之前获取任何其他侦听器。这是因为
窗口
将是第一个收到任何事件通知的节点,侦听器将按添加顺序触发。(我猜这是你正在使用的工具的设计者故意做的。在我看来,最终用户不是很友好。)


唯一的解决方法是如果您有一个对绑定函数的引用,在这种情况下,您可以使用
removeEventListener
,添加您自己的侦听器,然后重新绑定原始侦听器。但是,在代码中似乎不太可能出现这种情况。

您需要一个脚本标记首先出现在页面中,最好出现在
中。然后,你可以先连接你的听众。

你能更具体地说明你想做什么吗?我不清楚为什么不能在
console.log
之前的回调函数中调用“injected”函数;我正在编写一个javascript应用程序可以通过标记包含的工具。此工具通过向DOM添加画布,在应用程序上提供覆盖。我希望该工具能够在应用程序获取所有输入事件之前拦截它们,这样,如果用户单击叠加中的一个渲染按钮,我就可以取消传播。然而,如果应用程序使用捕获在窗口上注册了一个事件,我就不知道如何“提前”应用程序的回调。(编辑:为清晰起见-在本例中,是主机应用程序添加了上述事件,而不是我的工具)谢谢-我无法控制主机应用程序包含脚本的位置,但我可以为包括脚本的开发人员提供指导。是的,我的代码中没有选项;但澄清不可能是有帮助的。将此标记为答案,直到有人给出不可能的答案:)。谢谢!