覆盖现有的onkeydown函数

Ass*_*ski 4 javascript overriding onkeydown google-chrome-extension

我的扩展程序遍历在加载的任何网站上输入的每个输入.

我所做的是我考虑每个onkeydown并操纵它,如果它有一些价值.

我的后台js文件包含以下内容:

document.onkeydown = returnKey; 

function returnKey(evt) {   
    var evt  = (evt) ? evt : ((event) ? event : null);
    var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);  
    if ( node.value == 'fi' ) { evt.srcElement.value = "??"; }  
}
Run Code Online (Sandbox Code Playgroud)

我的问题是当我的innerHTML网页中已经包含onkeydown函数的网站时.

例如:

取自facebook的主页:

<textarea class="uiTextareaAutogrow input" onkeydown="Bootloader.loadComponents([&quot;control-textarea&quot;], function() { TextAreaControl.getInstance(this) }.bind(this));
Run Code Online (Sandbox Code Playgroud)

node.value == 'fi'in ?? 的切换 没有执行,因为他们onkeydown="Bootloader...在我之前运行document.onkeydown.

如何在执行onkeydown之前使我的函数运行?

Rob*_*b W 7

而不是document.onkeydown = returnKey;,使用

document.addEventListener('keydown', returnKey, true);
Run Code Online (Sandbox Code Playgroud)

这一行最重要的部分是第三个论点.当此参数的值为true,则在捕获阶段触发事件侦听器,使用event.preventDefault();或无法阻止event.stopPropagation();.