簡體   English   中英

Firefox 擴展開發中的“加載”事件處理程序問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM