Reusing tabs for the same URL: Difference between revisions

From MozillaZine Knowledge Base
Jump to navigationJump to search
(initial)
(No difference)

Revision as of 01:10, 29 March 2005

A common feature found in many extensions is to point the user to chrome:// URIs (e.g., help or about information) or external (on-line) HTML documents when he clicks an extension button or link.

Rather than open a new browser or new tab each and every time the same URI is needed, it is better practice to re-use an existing tab which already displays the desired URI, if one exists. Following this practice minimizes the proliferation of tabs and browsers created by your extension.

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 (browserEnumerator.hasMoreElements() && !found) {
    var browserInstance = browserEnumerator.getNext().document.getElementById("content"); 
    // Check each tab of this browser instance
    var currentTab, index = 0, numTabs = browserInstance.mPanelContainer.childNodes.length;
    while (index < numTabs && !found) {
      currentTab = browserInstance.getBrowserAtIndex(index);
      if (url == currentTab.currentURI.spec) {
        // The URL is already opened. Select its tab.
        browserInstance.selectedTab = currentTab;
        // Focus *this* browser
        browserInstance.focus();
        found = true;
      }
      index++;
    }
  }

  // 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);
    }
    else {
      // No browser windows are open, so open a new one.
      window.open(url);
    }
  }
}