Javascript 如何确定所有选项卡都已加载到Firefox中?

Javascript 如何确定所有选项卡都已加载到Firefox中?,javascript,tabs,firefox-addon,loading,dom-events,Javascript,Tabs,Firefox Addon,Loading,Dom Events,我正在编写一个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

我正在编写一个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时打印一条警告消息。我还想在我的网站上添加一个新标签


怎么做?

我想您的意思是等到浏览器启动时会话恢复。发送了一个
sessionstore windows restored
通知,您可以通过observer服务收听该通知。大概是这样的:

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);

我猜您的意思是等到浏览器启动时会话恢复。发送了一个
sessionstore windows restored
通知,您可以通过observer服务收听该通知。大概是这样的:

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);

如果Firefox正在加载具有相同url的选项卡,我不想添加该选项卡。相反,我只想选择它。这也是我希望能够检测到所有标签何时都已加载的部分原因。如果Firefox正在加载具有相同url的标签,我不想添加标签。相反,我只想选择它。这就是我希望能够检测到所有选项卡何时都已加载的部分原因。实际上,它不起作用,因为选项卡尚未加载,我需要知道每个选项卡的uri。你知道这在什么情况下有效吗@威尔:选项卡将被还原-URL应该可以通过
gBrowser.browsers
集合中每个浏览器的
currentURI.spec
属性访问。如果没有,您将不得不添加侦听器以等待每个选项卡加载。感谢您的帮助Wladimir!实际上,它不起作用,因为选项卡还没有加载,我需要知道每个选项卡的uri。你知道这在什么情况下有效吗@威尔:选项卡将被还原-URL应该可以通过
gBrowser.browsers
集合中每个浏览器的
currentURI.spec
属性访问。如果没有,您将不得不添加侦听器以等待每个选项卡加载。感谢您的帮助Wladimir!