强调一下,用户代理检测是客户端检测的最后一个选择。只要可能,都应该优先采用能力检测和怪癖检测。用户代理检测一般适用以下情形:
- 不能直接准确地使用能力检测或怪癖检测。例如,某些浏览器实现了为将来功能预留的存根(stub)函数。在这种情况下,仅测试相应的函数是否存在还得不到足够的信息。
 
- 同一款浏览器在不同平台下具备不同的能力。这时候,可能就有必要确定浏览器位于哪个平台下。
 
- 为了跟踪分析等目的需要知道确切的浏览器。
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
   |  var client = function() {
      var engine = {                  ie: 0,         gecko: 0,         webkit: 0,         khtml: 0,         opera: 0,                  ver: null     };     var browser = {                  ie: 0,         firefox: 0,         safari: 0,         kong: 0,         opera: 0,         chrome: 0,                  ver: null     };
      var ua = navigator.userAgent;
      if (window.opera) {         engine.ver = browser.ver = window.opera.version();         engine.opera = browser.opera = parseFloat(engine.ver);     } else if (/AppleWebKit\/(\S+)/.test(ua)) {         engine.ver = RegExp['$1'];         engine.webkit = parseFloat(engine.ver);
                   if (/Chrome\/(\S+)/.test(ua)) {             browser.ver = RegExp['$1'];             browser.chrome = parseFloat(browser.ver);         } else if (/Version\/(\S+)/.test(ua)) {             browser.ver = RegExp['$1'];             browser.safari = parseFloat(browser.ver);         } else {                          var safariVersion = 1;
              if (engine.webkit < 100) {                 safariVersion = 1;             } else if (engine.webkit < 312) {                 safariVersion = 1.2;             } else if (engine.webkit < 412) {                 safariVersion = 1.3;             } else {                 safariVersion = 2;             }
              browser.safari = browser.ver = safariVersion;         }
      } else if (/KHTML\/(\S+)/.test(ua) || /Konqueror\/([^;]+)/.test(ua)) {         engine.ver = browser.ver = RgeExp['$1'];         engine.khtml = browser.kong = parseFloat(engine.ver);     } else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)) {         engine.ver = RegExp['$1'];         engine.gecko = parseFloat(engine.ver);
          if (/Firefox\/(\S+)/.test(ua)) {             browser.ver = RegExp['$1'];             browser.firefox = parseFloat(browser.ver);         }
      } else if (/MSIE ([^;]+)/.test(ua)) {         engine.ver = browser.ver = RegExp['$1'];         engine.ie = browser.ie = parseFloat(engine.ver);     }
      return {         engine: engine,         browser: browser     }; }();
 
  console.log(client.engine.ver);
  console.log(client.browser.ver);
 
  | 
 
还有一个平台检测功能此处未实现,待后续更新…