[编辑:添加有关该方案的更多详细信息]
我正在创建一个应用程序可以使用脚本标记包含的工具;此工具会为其应用添加叠加效果;该叠加层包括我在画布上渲染的画布和控件。我希望该工具能够捕获所有输入事件并处理它们(如果发生在其中一个渲染控件上)并停止传播到应用程序,或者将它们传递给应用程序(如果没有发生在其中一个渲染上)对照)。
除非应用程序使用捕获在窗口上注册事件,否则我可以抢占所有主机应用程序的输入事件,如下所示:
window.addEventListener("mousedown", (e) => console.log("hi"), true);
我的工具有没有办法注入一个在此之前被调用的函数?
答案 0 :(得分:1)
没有。如果在捕获阶段将事件侦听器附加到window
,则无法在其之前获取任何其他侦听器。这是因为window
将是第一个被通知任何事件的节点,并且按照添加的顺序触发侦听器。 (我猜这是你故意使用的工具的设计者。不是最终用户友好的,IMO。)
唯一的方法就是如果你有一个对绑定函数的引用,在这种情况下你可以使用removeEventListener
,添加你自己的监听器,然后重新绑定原始的监听器。但是,在您的代码中,这似乎不太可能。
答案 1 :(得分:1)
您需要在页面中首先显示一个脚本标记,最好是<head>
。然后你首先要附上你的听众。