我正在编写一个firefox扩展,但由于正确地获得了正确的事件,因此存在用户交互问题。我的扩展应完成以下任务:
到目前为止一切顺利,它确实有效。我使用以下eventHandler启动序列:
window.gBrowser.selectedTab.addEventListener("load",function(){ Fabogore.Load();},true);
打开对话框后,我尝试从对话框中删除EventHandler:
window.opener.gBrowser.selectedTab.removeEventListener("load",function(){Fabogore.Load();},true);
但序列一次又一次被触发,eventlistener获取每个标签的每个加载事件,尽管我使用了selectedTab?所以Dialog一次又一次弹出。我也尝试在原始Javascript中关闭事件处理程序。
任何猜测?在此先感谢:)
答案 0 :(得分:0)
这很容易解释 - 您添加为监听器的功能和您删除的功能是不同的。尝试运行此代码:
alert(function(){ Fabogore.Load();} == function(){ Fabogore.Load();});
这将显示false
,每次在代码中定义一个函数时,都会创建一个 new 函数。要解决您的问题,您需要定义一个函数,存储对它的引用并使用它来添加和删除监听器:
var listener = function(){ Fabogore.Load();};
var listenerTab = window.gBrowser.selectedTab;
listenerTab.addEventListener("load", listener, true);
[...]
listenerTab.removeEventListener("load", listener, true);
请注意,我还将window.gBrowser.selectedTab
的值存储在变量中 - 当您决定删除侦听器时,所选的选项卡可能已经更改。您希望从添加它的选项卡中删除侦听器,而不是其他选项卡。