我的扩展程序会检查在加载的任何网站上输入的每个输入。
我所做的是,如果它有一些价值,我会考虑每个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(["control-textarea"], function() { TextAreaControl.getInstance(this) }.bind(this));
切换node.value == 'fi'
?因为onkeydown="Bootloader
...在document.onkeydown
之前运行,所以没有执行。
如何在执行onkeydown之前使我的函数运行?
答案 0 :(得分:6)
而不是document.onkeydown = returnKey;
,请使用
document.addEventListener('keydown', returnKey, true);
这一行最重要的部分是第三个论点。当此参数的值为true
时,将在捕获阶段触发事件侦听器,使用event.preventDefault();
或event.stopPropagation();
无法阻止该事件监听器。