xra*_*alf 7 javascript events firefox-addon addeventlistener
我正在使用此代码进行firefox扩展
1: var Test {
2: f: function() {
3: alert("DOM content loaded");
4: window.removeEventListener("DOMContentLoaded", function(e) { Test.f(); }, false);
5: }
6: }
7: window.addEventListener("DOMContentLoaded", function(e) { Test.f(); }, false);
Run Code Online (Sandbox Code Playgroud)
它应该在加载DOM内容(weg页面)时执行函数f()中的代码,这意味着如果我打开新页面或新选项卡或重新加载页面,它应该给我一个警报.问题是,它给了我大约20个警报,而不是一个.
如果我想在函数f()中附加一些文本(例如,如果我想附加文本"(com)"它将附加"(com)(com)(com)(com)( COM)"
你知道如何实现我想要的行为吗?
removeEventListener没有帮助.
罪魁祸首似乎是其他firefox扩展和about:blank.DOMContentLoaded上的事件监听器是否可能忽略其他扩展导致的页面加载?
谢谢
DOMContentLoaded 通常每个文档仅触发一次,因此我怀疑您也从页面框架捕获事件。根据所提供的信息无法确定。
我可以告诉你为什么你无法删除监听器。function(e) { Test.f(); }是一个闭包,每次运行此代码时都会创建一个新函数。因此,您添加为侦听器的函数与您删除的函数不同。例如尝试以下操作:
alert(function(e) { Test.f(); } == function(e) { Test.f(); });
Run Code Online (Sandbox Code Playgroud)
为了避免这个问题,你需要真正记住你的闭包,例如:
var listener = function(e)
{
window.removeEventListener("DOMContentLoaded", listener, false);
Test.f();
}
window.addEventListener("DOMContentLoaded", listener, false);
Run Code Online (Sandbox Code Playgroud)