覆盖现有的onkeydown函数

时间:2012-12-14 14:01:21

标签: javascript google-chrome-extension override onkeydown

我的扩展程序会检查在加载的任何网站上输入的每个输入。

我所做的是,如果它有一些价值,我会考虑每个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 = "??"; }  
}

我的问题是我的innerHTML网页中已经包含已经包含onkeydown功能的网站。

例如:

取自facebook的主页:

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

切换node.value == 'fi'?因为onkeydown="Bootloader ...在document.onkeydown之前运行,所以没有执行。

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

1 个答案:

答案 0 :(得分:6)

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

document.addEventListener('keydown', returnKey, true);

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