有没有办法抢占用window.addEventListener创建的事件处理程序?

时间:2017-01-28 15:47:24

标签: javascript

[编辑:添加有关该方案的更多详细信息]

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

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

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

我的工具有没有办法注入一个在此之前被调用的函数?

2 个答案:

答案 0 :(得分:1)

没有。如果在捕获阶段将事件侦听器附加到window,则无法在其之前获取任何其他侦听器。这是因为window将是第一个被通知任何事件的节点,并且按照添加的顺序触发侦听器。 (我猜这是你故意使用的工具的设计者。不是最终用户友好的,IMO。)

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

答案 1 :(得分:1)

您需要在页面中首先显示一个脚本标记,最好是<head>。然后你首先要附上你的听众。