1

Firefox 内でのタブの再利用に関するチュートリアルに従いましたが、現在、私の拡張機能はうまく機能しています。ただし、外部から開いたタブ (一部のアプリケーション、スタート メニューなど) を再利用する必要もあります。どうすればいいですか?

TabOpen イベントのイベントリスナーを追加しようとしましたが、ログに記録すると

event.target.linkedBrowser.currentURI.spec

その値は「about:blank」です。アドレスバーに入力した実際のアドレス (新しいタブで自動的に開きます)、または他のアプリケーションから開いたアドレスを期待していたので、そのタブをすぐに閉じて、正しいタブにフォーカスできます。私は何を間違っていますか?

前もって感謝します。


念のため、拡張機能から新しいタブが要求されたときにタブを再利用するコードを次に示します。

function openAndReuseOneTabPerURL(url) {
  var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                     .getService(Components.interfaces.nsIWindowMediator);
  var browserEnumerator = wm.getEnumerator("navigator:browser");

  // Check each browser instance for our URL
  var found = false;
  while (!found && browserEnumerator.hasMoreElements()) {
    var browserWin = browserEnumerator.getNext();
    var tabbrowser = browserWin.getBrowser();

    // Check each tab of this browser instance
    var numTabs = tabbrowser.browsers.length;
    for(var index=0; index<numTabs; index++) {
      var currentBrowser = tabbrowser.getBrowserAtIndex(index);
      if (url == currentBrowser.currentURI.spec) {

        // The URL is already opened. Select this tab.
        tabbrowser.selectedTab = tabbrowser.mTabs[index];

        // Focus *this* browser-window
        browserWin.focus();

        found = true;
        break;
      }
    }
  }

  // Our URL isn't open. Open it now.
  if (!found) {
    var recentWindow = wm.getMostRecentWindow("navigator:browser");
    if (recentWindow) {
      // Use an existing browser window
      recentWindow.delayedOpenTab(url, null, null, null, null);
    }
    else {
      // No browser windows are open, so open a new one.
      window.open(url);
    }
  }
}
4

2 に答える 2

2

TabOpen イベントを受け取った時点では、まだページ コンテンツを読み込むには時期尚早です。ただし、TabOpen イベントを受け取ったら、load または DOMContentLoaded に登録する必要があります。そのイベントを受け取ったら、URI にアクセスできるはずです。

于 2009-06-16T19:20:24.277 に答える