我的扩展会遍历在任何加载的网站上输入的每个输入。
我所做的是考虑每一个键下,如果它有一些价值,我就会操纵它。
我的后台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 = "??"; }
}
我的问题是当我的网站在其内部HTML网页中已经包含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 之前运行?
代替 document.onkeydown = returnKey;
,使用
document.addEventListener('keydown', returnKey, true);
这一行最重要的部分是第三个参数。当此参数的值为 true
时,事件侦听器在捕获阶段触发,这无法使用 event.preventDefault();
或 event.stopPropagation();
来阻止。