6

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

我所做的是我考虑每一个 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 之前使我的函数运行?

4

1 回答 1

9

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

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

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

于 2012-12-14T14:37:06.140 回答