用户代理检测



  • 通过检测用户代理字符串来检测实际使用的浏览器

    • 在服务器端:这种做法常用且被广为接受
    • 在客户端:这种做法是一种万不得已的做法,优先级在能力检测/怪癖检测之后

    用户代理字符串检测技术

    识别浏览器不如识别它使用的引擎
    • 五大呈现引擎
      • IE
      • Gecko
      • WebKit
      • KHTML
      • Opera
    let client = function () {
      let engine = {
        ie: 0,
        gecko: 0,
        webkit: 0,
        khtml: 0,
        opera: 0,
        ver: null    //版本号
      };
    
      return {
        engine: engine
      };
    };
    

    如果检测到了哪个呈现引擎,就以浮点数的形式将该引擎的版本号写入相应的属性。由于是浮点数值,因此有可能丢失某些版本信息(如1.8.1传入parseFloat()后会得到数值1.8)。

    为了解决上述问题,我们将呈现引擎的完整版本写入ver属性

    这样的区分可以支持如下代码:

    if (client.engine.ie) {//如果是IE
      //针对IE的代码
    }
    else if (client.engine.gecko > 1.5) {
      if (client.engine.ver === "1.8.1") {
      }
    }
    
    检测顺序是关键
    • 第一步:识别Opera

      因为Opera的用户代理字符串会模仿其他浏览器,而其它浏览器的用户代理字符串不会将自己标识为Opera

    • 第二步:识别WebKit

      WebKit的用户代理字符串中包含“Gecko”与“KHTML”

      但WebKit用户代理字符串中的“AppleWebKit”是独一无二的

    • 第三步:识别KHTML

      KHTML的用户代理字符串中包含“Gecko”

    • 第四步:识别Gecko

      Gecko的版本号出现在字符串“rv:“的后面


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待