2011-07-01 72 views
0

我正在編寫一個Firefox插件,我需要能夠在加載所有選項卡後運行一些代碼。如何確定所有選項卡已在Firefox中加載?

我想是這樣的:

window.addEventListener("load", function(e) { 
    gBrowser.addEventListener("load", function(ee) { 
     // code to run after all tabs have loaded 

     // thank user for installing my add-on 
     alert('Thank you for installing my add-on'); 

     // add tab to my website 
     gBrowser.selectedTab = gBrowser.addTab("http://www.mywebsite.com/"); 

    }, true); 
}, false); 

但是,這並不工作,因爲它被加載後,這會爲每個選項卡運行的代碼。我想等到所有的選項卡都加載完畢。當用戶安裝我的加載項後Firefox重新啓動時,我想要打印警報消息。我也想在我的網站上添加一個新標籤。

我該怎麼做?

+0

我不想添加選項卡,如果Firefox正在加載一個選項卡與相同的網址。相反,我想選擇它。這就是我希望能夠檢測所有標籤何時加載的原因的一部分。 – Will

回答

3

我想你的意思是等到瀏覽器啓動時恢復會話。發送了一個sessionstore-windows-restored通知,您可以通過觀察員服務收聽。這樣的事情:

Cu.import("resource://gre/modules/XPCOMUtils.jsm"); 
var observer = 
{ 
    QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIObserver]), 
    observe: function(subject, topic, data) 
    { 
    observerService.removeObserver(observer, "sessionstore-windows-restored"); 
    addTabNow(); 
    } 
}; 

var observerService = Components.classes["@mozilla.org/observer-service;1"] 
           .getService(Components.interfaces.nsIObserverService); 
observerService.addObserver(observer, "sessionstore-windows-restored", false); 
+0

謝謝,這似乎工作! – Will

+0

實際上,它不工作,因爲選項卡尚未加載,我需要知道每個選項卡的uri。你有任何事情發生的地方嗎? https://developer.mozilla.org/en/Observer_Notifications – Will

+0

@ Will:標籤將被恢復 - 這些URL應該可以通過'gBrowser.browsers'集合中每個瀏覽器的'currentURI.spec'屬性來訪問。如果沒有,您將不得不添加偵聽器來等待每個選項卡加載。 –

相關問題