1

我遵循了一个关于在 Firefox 中重用标签的教程,现在我的扩展做得很好。但是,我还需要重用从外部打开的选项卡(从某些应用程序、开始菜单等)。我该怎么做呢?

我尝试为 TabOpen 事件添加事件侦听器,但是当我记录

event.target.linkedBrowser.currentURI.spec

它的值是“关于:空白”。我希望我在地址栏中输入的实际地址(自动在新选项卡中打开),或者我从其他应用程序打开的地址,所以我可以立即关闭该选项卡,并将焦点放在正确的选项卡上。我究竟做错了什么?

提前致谢。


以防万一,这是在从扩展程序请求新选项卡时重用选项卡的代码

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 回答
0

我想你可以从Tab Mix Plus扩展中的实现中提取想要的行为

于 2009-06-14T11:00:56.790 回答