| 668 | | |
|---|
| 669 | | var useRM = false; |
|---|
| 670 | | try { |
|---|
| 671 | | var ver = Components.classes["@mozilla.org/xre/app-info;1"] |
|---|
| 672 | | .getService(Components.interfaces.nsIXULAppInfo) |
|---|
| 673 | | .platformVersion; |
|---|
| 674 | | var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"] |
|---|
| 675 | | .getService(Components.interfaces.nsIVersionComparator); |
|---|
| 676 | | useRM = versionChecker.compare(ver, "1.8") < 0; |
|---|
| 677 | | } catch (ex) { |
|---|
| 678 | | // nothing to do here. |
|---|
| 679 | | // seems to be an old version of Gecko/XRE. |
|---|
| 680 | | } |
|---|
| 681 | | var enumerator = Components.classes["@mozilla.org/appshell/window-mediator;1"] |
|---|
| 682 | | .getService(Components.interfaces.nsIWindowMediator) |
|---|
| 683 | | .getEnumerator("navigator:browser"); |
|---|
| 684 | | |
|---|
| 685 | | var chk = function(tab, url) { |
|---|
| 686 | | if (tab.currentURI.spec == url || tab.contentWindow.location == url) { |
|---|
| 687 | | return tab; |
|---|
| 688 | | } |
|---|
| 689 | | var frames = tab.contentWindow.frames; |
|---|
| | 668 | function chk(browser, url) { |
|---|
| | 669 | if (browser.currentURI.spec == url) { |
|---|
| | 670 | return true; |
|---|
| | 671 | } |
|---|
| | 672 | var frames = browser.contentWindow.frames; |
|---|
| 706 | | browser = win.getBrowser(); |
|---|
| 707 | | |
|---|
| 708 | | ++numBrowsers; |
|---|
| 709 | | numTabs = browser.browsers.length; |
|---|
| 710 | | |
|---|
| 711 | | // likely its the selected tab. |
|---|
| 712 | | if ((tab = chk(browser.selectedBrowser, url)) != null) { |
|---|
| 713 | | break; |
|---|
| 714 | | } |
|---|
| 715 | | // Check each tab of this browser instance |
|---|
| 716 | | for (var i = 0; i < numTabs && !tab; ++i) { |
|---|
| 717 | | tab = chk(browser.getBrowserAtIndex(i), url); |
|---|
| 718 | | } |
|---|
| 719 | | if (tab) { |
|---|
| 720 | | break; |
|---|
| 721 | | } |
|---|
| 722 | | } |
|---|
| 723 | | |
|---|
| 724 | | // nothing found :p |
|---|
| 725 | | if (!tab) { |
|---|
| 726 | | return; |
|---|
| 727 | | } |
|---|
| 728 | | |
|---|
| 729 | | // newer gecko or more than one tab in window |
|---|
| 730 | | if (useRM || numTabs > 1) { |
|---|
| 731 | | browser.removeTab(tab); |
|---|
| 732 | | } |
|---|
| 733 | | // last tab, more windows, old gecko => close |
|---|
| 734 | | else if (numBrowsers > 1 || enumerator.hasMoreElements()) { |
|---|
| 735 | | win.close(); |
|---|
| 736 | | } |
|---|
| 737 | | // old gecko, last tab, last window |
|---|
| 738 | | else { |
|---|
| 739 | | // this is the 1.8.0 way |
|---|
| 740 | | browser.addTab('about:blank'); |
|---|
| 741 | | browser.removeTab(tab); |
|---|
| | 686 | var browser = win.getBrowser(); |
|---|
| | 687 | for (var i = browser.browsers.length - 1; i >= 0; --i) { |
|---|
| | 688 | if (chk(browser.getBrowserAtIndex(i), url)) { |
|---|
| | 689 | browser.removeTab(browser.mTabContainer.childNodes[i]); |
|---|
| | 690 | return; |
|---|
| | 691 | } |
|---|
| | 692 | } |
|---|