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); } } }