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 に答える