topical media & game development

talk show tell print

professional-javascript-17-detect.js / js



  var sUserAgent = navigator.userAgent;
  var fAppVersion = parseFloat(navigator.appVersion);
  
  function compareVersions(sVersion1, sVersion2) {
  
      var arrVersion1 = sVersion1.split(".");
      var arrVersion2 = sVersion2.split(".");
      
      if (arrVersion1.length > arrVersion2.length) {
          for (var i=0; i < arrVersion1.length - arrVersion2.length; i++) {
              arrVersion2.push("0");
          }
      } else if (arrVersion1.length < arrVersion2.length) {
          for (var i=0; i < arrVersion2.length - arrVersion1.length; i++) {
              arrVersion1.push("0");
          }    
      }
      
      for (var i=0; i < arrVersion1.length; i++) {
   
          if (arrVersion1[i] < arrVersion2[i]) {
              return -1;
          } else if (arrVersion1[i] > arrVersion2[i]) {
              return 1;
          }    
      }
      
      return 0;
  
  }
  
  var isOpera = sUserAgent.indexOf("Opera") > -1;
  var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false;
  
  if (isOpera) {
      var fOperaVersion;
      if(navigator.appName == "Opera") {
          fOperaVersion = fAppVersion;
      } else {
          var reOperaVersion = new RegExp("Opera (\\d+\\.\\d+)");
          reOperaVersion.test(sUserAgent);
          fOperaVersion = parseFloat(RegExp["$1"]);
      }
  
      isMinOpera4 = fOperaVersion >= 4;
      isMinOpera5 = fOperaVersion >= 5;
      isMinOpera6 = fOperaVersion >= 6;
      isMinOpera7 = fOperaVersion >= 7;
      isMinOpera7_5 = fOperaVersion >= 7.5;
  }
  
  var isKHTML = sUserAgent.indexOf("KHTML") > -1 
                || sUserAgent.indexOf("Konqueror") > -1 
                || sUserAgent.indexOf("AppleWebKit"); 
                
  var isMinSafari1 = isMinSafari1_2 = false;
  var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false;
  
  if (isKHTML) {
      isSafari = sUserAgent.indexOf("AppleWebKit") > -1;
      isKonq = sUserAgent.indexOf("Konqueror") > -1;
  
      if (isSafari) {
          var reAppleWebKit = new RegExp("AppleWebKit\\/(\\d+(?:\\.\\d*)?)");
          reAppleWebKit.test(sUserAgent);
          var fAppleWebKitVersion = parseFloat(RegExp["$1"]);
  
          isMinSafari1 = fAppleWebKitVersion >= 85;
          isMinSafari1_2 = fAppleWebKitVersion >= 124;
      } else if (isKonq) {
  
          var reKonq = new RegExp("Konqueror\\/(\\d+(?:\\.\\d+(?:\\.\\d)?)?)");
          reKonq.test(sUserAgent);
          isMinKonq2_2 = compareVersions(RegExp["$1"], "2.2") >= 0;
          isMinKonq3 = compareVersions(RegExp["$1"], "3.0") >= 0;
          isMinKonq3_1 = compareVersions(RegExp["$1"], "3.1") >= 0;
          isMinKonq3_2 = compareVersions(RegExp["$1"], "3.2") >= 0;
      } 
      
  }
  
  var isIE = sUserAgent.indexOf("compatible") > -1 
             && sUserAgent.indexOf("MSIE") > -1
             && !isOpera;
             
  var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIE6 = false;
  
  if (isIE) {
      var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
      reIE.test(sUserAgent);
      var fIEVersion = parseFloat(RegExp["$1"]);
  
      isMinIE4 = fIEVersion >= 4;
      isMinIE5 = fIEVersion >= 5;
      isMinIE5_5 = fIEVersion >= 5.5;
      isMinIE6 = fIEVersion >= 6.0;
  }
  
  var isMoz = sUserAgent.indexOf("Gecko") > -1
              && !isKHTML;
  
  var isMinMoz1 = sMinMoz1_4 = isMinMoz1_5 = false;
  
  if (isMoz) {
      var reMoz = new RegExp("rv:(\\d+\\.\\d+(?:\\.\\d+)?)");
      reMoz.test(sUserAgent);
      isMinMoz1 = compareVersions(RegExp["$1"], "1.0") >= 0;
      isMinMoz1_4 = compareVersions(RegExp["$1"], "1.4") >= 0;
      isMinMoz1_5 = compareVersions(RegExp["$1"], "1.5") >= 0;
  }
  
  var isNS4 = !isIE && !isOpera && !isMoz && !isKHTML 
              && (sUserAgent.indexOf("Mozilla") == 0) 
              && (navigator.appName == "Netscape") 
              && (fAppVersion >= 4.0 && fAppVersion < 5.0);
  
  var isMinNS4 = isMinNS4_5 = isMinNS4_7 = isMinNS4_8 = false;
  
  if (isNS4) {
      isMinNS4 = true;
      isMinNS4_5 = fAppVersion >= 4.5;
      isMinNS4_7 = fAppVersion >= 4.7;
      isMinNS4_8 = fAppVersion >= 4.8;
  }
  
  var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows");
  var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC") 
              || (navigator.platform == "Macintosh");
  
  var isUnix = (navigator.platform == "X11") && !isWin && !isMac;
  
  var isWin95 = isWin98 = isWinNT4 = isWin2K = isWinME = isWinXP = false;
  var isMac68K = isMacPPC = false;
  var isSunOS = isMinSunOS4 = isMinSunOS5 = isMinSunOS5_5 = false;
  
  if (isWin) {
      isWin95 = sUserAgent.indexOf("Win95") > -1 
                || sUserAgent.indexOf("Windows 95") > -1;
      isWin98 = sUserAgent.indexOf("Win98") > -1 
                || sUserAgent.indexOf("Windows 98") > -1;
      isWinME = sUserAgent.indexOf("Win 9x 4.90") > -1 
                || sUserAgent.indexOf("Windows ME") > -1;
      isWin2K = sUserAgent.indexOf("Windows NT 5.0") > -1 
                || sUserAgent.indexOf("Windows 2000") > -1;
      isWinXP = sUserAgent.indexOf("Windows NT 5.1") > -1 
                || sUserAgent.indexOf("Windows XP") > -1;
      isWinNT4 = sUserAgent.indexOf("WinNT") > -1 
                || sUserAgent.indexOf("Windows NT") > -1 
                || sUserAgent.indexOf("WinNT4.0") > -1 
                || sUserAgent.indexOf("Windows NT 4.0") > -1 
                && (!isWinME && !isWin2K && !isWinXP);
  } 
  
  if (isMac) {
      isMac68K = sUserAgent.indexOf("Mac_68000") > -1 
                 || sUserAgent.indexOf("68K") > -1;
      isMacPPC = sUserAgent.indexOf("Mac_PowerPC") > -1 
                 || sUserAgent.indexOf("PPC") > -1;  
  }
  
  if (isUnix) {
      isSunOS = sUserAgent.indexOf("SunOS") > -1;
  
      if (isSunOS) {
          var reSunOS = new RegExp("SunOS (\\d+\\.\\d+(?:\\.\\d+)?)");
          reSunOS.test(sUserAgent);
          isMinSunOS4 = compareVersions(RegExp["$1"], "4.0") >= 0;
          isMinSunOS5 = compareVersions(RegExp["$1"], "5.0") >= 0;
          isMinSunOS5_5 = compareVersions(RegExp["$1"], "5.5") >= 0;
      }
  }
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.