我正在尝试编写用户脚本来重新定义webapp的键绑定。使用Chrome DOM检查器,我发现在捕获阶段,密钥处理程序被定义为文档对象上的keydown事件监听器。据我了解事件模型,文档对象上的任何捕获阶段侦听器都将在任何其他事件之前运行,因此在默认情况下让我自己的侦听器运行的唯一方法是在webapp初始化之前安装它。
所以我用@run-at document-start
编写了一个用户脚本来运行
document.addEventListener("keydown", function(e){
alert("foo");
e.stopPropagation();
e.stopImmediatePropagation();
}, true);
在webapp安装自己的处理程序之前。根据DOM检查员的说法,我的处理程序确实是第一个,当我在页面的某些部分点击某个键时,我会收到警报。但是在我正在尝试“修复”的富文本编辑器中,警报完全缺失。
我还尝试添加自己的替换Node.prototype.addEventHandler
来拦截注册违规处理程序的调用,但似乎Closure不会因此而崩溃(或者还有一些其他时间问题),因为到时候页面已完成加载,它返回到本机功能而不是我的替换。原生addEventHandler
显然使得无法检查处理程序,所以据我所知,我无法通过webapp的处理程序修改或删除它。
所以现在我的想法已经用完了 - 其他人怎么会改变这个关键处理程序?