覆盖现有的onkeydown函数 [英] override existing onkeydown function
问题描述
我的扩展程序会处理在任何加载的网站上输入的每个输入。
我所做的是我认为每个onkeydown都有操作, 。
我的后台js文件包含以下内容:
文档。 onkeydown = returnKey;
函数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 inputonkeydown =Bootloader.loadComponents([& quot; control-textarea& quot;],function(){TextAreaControl.getInstance )} .bind(this));
切换 node.value =='fi'
in ??因为它们的 onkeydown =Bootloader
...在我的文档之前运行.onkeydown
。
如何让我的函数在执行onkeydown之前运行?
来代替
document.onkeydown = returnKey; $> pre> document.addEventListener('keydown',returnKey,true);
该行最重要的部分是第三个参数。当此参数的值 true
时,事件侦听器在捕获阶段被触发,这是使用 event.preventDefault(); code>或 event.stopPropagation();
。
My extensions go through every input entered on an on any website that is loaded.
What I do is I consider every onkeydown and manipulate it if it has some value.
my background js file contains the following:
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 = "??"; }
}
My problem is when I have websites that already contains onkeydown function in their innerHTML webpage.
for instance:
taken from facebook's homepage:
<textarea class="uiTextareaAutogrow input" onkeydown="Bootloader.loadComponents(["control-textarea"], function() { TextAreaControl.getInstance(this) }.bind(this));
the switching of node.value == 'fi'
in ?? is not executing since their onkeydown="Bootloader
...runs before my document.onkeydown
.
How do I cause my function to run before their onkeydown is executed?
解决方案 Instead of document.onkeydown = returnKey;
, use
document.addEventListener('keydown', returnKey, true);
The most important part of this line is the third argument. When the value of this parameter is true
, the event listener is triggered at capturing phase, which cannot be prevented using event.preventDefault();
or event.stopPropagation();
.
这篇关于覆盖现有的onkeydown函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!