用户代理检测
-
通过检测用户代理字符串来检测实际使用的浏览器
- 在服务器端:这种做法常用且被广为接受
- 在客户端:这种做法是一种万不得已的做法,优先级在能力检测/怪癖检测之后
用户代理字符串检测技术
识别浏览器不如识别它使用的引擎
- 五大呈现引擎
- 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:“的后面