[英]Issues with “load” event handler in Firefox Extension Developement
我正在編寫一個 Firefox 擴展,但由於正確獲取正確的事件而導致用戶交互出現問題。 我的擴展應完成以下任務:
到目前為止一切順利,它有效。 我從以下 eventHandler 開始序列:
window.gBrowser.selectedTab.addEventListener("load",function(){ Fabogore.Load();},true);
打開對話框后,我嘗試從對話框中刪除 EventHandler:
window.opener.gBrowser.selectedTab.removeEventListener("load",function(){Fabogore.Load();},true);
但是序列一次又一次地被觸發,事件監聽器獲取每個選項卡的每個加載事件,盡管我使用了 selectedTab? 所以對話框一次又一次地彈出。 我還嘗試關閉原始 Javascript 中的事件處理程序。
有什么猜測嗎?
這很容易解釋 - 您添加為偵聽器的 function 和您刪除的 function 是不同的。 嘗試運行此代碼:
alert(function(){ Fabogore.Load();} == function(){ Fabogore.Load();});
這將向您顯示false
,每次您在代碼中定義 function 時,都會創建一個新的 function 。 要解決您的問題,您需要定義一個function,存儲對它的引用並使用它來添加和刪除偵聽器:
var listener = function(){ Fabogore.Load();};
var listenerTab = window.gBrowser.selectedTab;
listenerTab.addEventListener("load", listener, true);
[...]
listenerTab.removeEventListener("load", listener, true);
請注意,我還將window.gBrowser.selectedTab
的值存儲在變量中 - 當您決定刪除偵聽器時,選定的選項卡可能已經更改。 您想從添加它的選項卡中刪除偵聽器,而不是其他選項卡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.