diff --git a/components/greasemonkey.js b/components/greasemonkey.js index f781deae7..a3e124388 100644 --- a/components/greasemonkey.js +++ b/components/greasemonkey.js @@ -10,20 +10,7 @@ var Cu = Components.utils; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -var maxJSVersion = (function() { - var appInfo = Cc["@mozilla.org/xre/app-info;1"] - .getService(Ci.nsIXULAppInfo); - var versionChecker = Cc["@mozilla.org/xpcom/version-comparator;1"] - .getService(Ci.nsIVersionComparator); - - // Firefox 3.5 and higher supports 1.8. - if (versionChecker.compare(appInfo.version, "3.5") >= 0) { - return "1.8"; - } - - // Everything else supports 1.6. - return "1.6"; -})(); +var maxJSVersion = "1.6"; var gmSvcFilename = Components.stack.filename; var gStartupHasRun = false; @@ -227,6 +214,11 @@ function startup() { loader.loadSubScript("chrome://greasemonkey/content/xmlhttprequester.js"); loader.loadSubScript("chrome://greasemonkey/content/scriptdownloader.js"); loader.loadSubScript("chrome://greasemonkey/content/third-party/mpl-utils.js"); + + // Firefox 3.5 and higher supports 1.8. + if (GM_compareFirefoxVersion("3.5") >= 0) { + return "1.8"; + } } /////////////////////////////////// Service //////////////////////////////////// diff --git a/content/addons.js b/content/addons.js index 35ae53276..77f63795a 100644 --- a/content/addons.js +++ b/content/addons.js @@ -6,20 +6,14 @@ var gUserscriptsView = null; var GM_firefoxVersion; var GM_os; (function() { -var appInfo = Components - .classes["@mozilla.org/xre/app-info;1"] - .getService(Components.interfaces.nsIXULAppInfo); -var versionChecker = Components - .classes["@mozilla.org/xpcom/version-comparator;1"] - .getService(Components.interfaces.nsIVersionComparator); var xulRuntime = Components .classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULRuntime); // Detect fixed possible compatible Firefox versions. -if (versionChecker.compare(appInfo.version, '3.5') < 0) { +if (GM_compareFirefoxVersion('3.5') < 0) { GM_firefoxVersion = '3.0'; -} else if (versionChecker.compare(appInfo.version, '3.6') < 0) { +} else if (GM_compareFirefoxVersion('3.6') < 0) { GM_firefoxVersion = '3.5'; } else { GM_firefoxVersion = '3.6'; diff --git a/content/browser.js b/content/browser.js index a41612503..ae73d2ad2 100644 --- a/content/browser.js +++ b/content/browser.js @@ -66,11 +66,7 @@ GM_BrowserUI.chromeLoad = function(e) { // what we want, instead we listen for dom-window-destroyed, which comes // pretty close (at least it doesn't leak memory). But: listening for dom- // in Firefox 4 causes breakage, so we just do either-or. - var appInfo = Cc["@mozilla.org/xre/app-info;1"] - .getService(Ci.nsIXULAppInfo); - var versionChecker = Cc["@mozilla.org/xpcom/version-comparator;1"] - .getService(Ci.nsIVersionComparator); - if (versionChecker.compare(appInfo.version, "4.0") >= 0) { + if (GM_compareFirefoxVersion("4.0") >= 0) { observerService.addObserver(GM_BrowserUI, "inner-window-destroyed", true); } else { observerService.addObserver(GM_BrowserUI, "dom-window-destroyed", true); diff --git a/content/utils.js b/content/utils.js index 971c9e14a..ce687668d 100644 --- a/content/utils.js +++ b/content/utils.js @@ -283,6 +283,16 @@ function GM_compareVersions(aV1, aV2) { return 0; } +/** Runs nsIVersionComparator.compare() on the Firefox version. */ +function GM_compareFirefoxVersion(aTarget) { + var appInfo = Cc["@mozilla.org/xre/app-info;1"] + .getService(Ci.nsIXULAppInfo); + var versionChecker = Cc["@mozilla.org/xpcom/version-comparator;1"] + .getService(Ci.nsIVersionComparator); + + return versionChecker.compare(appInfo.version, aTarget); +} + // Remove all children from an element. function GM_emptyEl(el) { while (el.firstChild) el.removeChild(el.firstChild);