2011-07-01 30 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'属性来访问。如果没有,您将不得不添加侦听器来等待每个选项卡加载。 –

相关问题