0

我正在尝试创建一个 Firefox 插件,它将在启动时查找某个页面并从中获取一些信息。我在加载时找不到页面。这是我到目前为止所拥有的:

var myfancyaddon = {
  onLoad: function() {
      var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
      observerService.addObserver(function restored() {
          observerService.removeObserver( restored, "sessionstore-windows-restored");
          var browser = myfancyaddon.findMySite();
          if (browser) {
              alert("tree falling in the woods"); // THIS LINE NEVER RUNS
              browser.contentWindow.addEventListener("load", function tab_loaded(){
                  browser.contentWindow.removeEventListener("load", tab_loaded(), false);
                  alert("mysite loaded!");
              }, false);
          }
      }, "sessionstore-windows-restored", false);
  },

  findMySite: function() {
      var browsers = gBrowser.browsers;
      for ( var i = 0; i < browsers.length; i++ ) {
          var browser = browsers[i];
          if (!browser.currentURI.spec) continue;
          if ( browser.currentURI.spec.match('^https?://(www\.)?mysite\.com/') ) return browser;
      }
      return null;
  }
};

window.addEventListener("load", function ff_loaded(){
    window.removeEventListener("load", ff_loaded, false); //remove listener, no longer needed
    myfancyaddon.onLoad();
},false);

经过一番调查,在它变成 mysite.com 之前,currentURI.spec 似乎在短时间内是“about:blank”。有任何想法吗?

4

2 回答 2

0

gBrowser.addEventListener("DOMContentLoaded", myfunction, false);您可以使用侦听所有选项卡文档上的页面加载,然后仅根据 url 运行代码,而不是先过滤然后添加负载侦听器。

https://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loads

于 2012-06-17T04:10:05.823 回答
0

"sessionstore-windows-restored"上一个会话中的选项卡已恢复并且这些选项卡中的加载已经开始时发送通知(有时:“在选择之前不加载选项卡”选项意味着加载甚至没有在后台选项卡中开始) . 但是这些选项卡的位置在联系服务器之前仍然存在about:blank,因为加载的地址可能会重定向或服务器可能无法访问(意味着内部重定向到about:neterror)。Firefox 仅在确定从新位置提供内容时才会更改浏览器位置。

拦截页面加载而不是等待会话恢复确实应该更好。

于 2012-06-17T07:53:00.253 回答