本文主要检测五大渲染引擎:IE、Gecko、WebKit、KHTML、Opera
思路
要正确识别呈现引擎,检测顺序要正确。
- 第一步:识别 Opera,因为它的用户代理字符串有可能完全模仿其他浏览器
- 第二步:检测 Webkit,因为 Webkit 的用户代理字符串中包含 “Gecko” 和 “KHTML” 这两个字符串,如果首先检测它们,可能会得出错误的结论
- 第三步:检测 KHTML,因为 KHTML 的用户代理字符串中包含 “Gecko”
- 第四步:检测 Gecko
- 第五步:检测 IE
var clientEngine = (function () {
// 渲染引擎对象,值为其对应的版本号
var engine = {
ie: 0,
gecko: 0,
webkit: 0,
khtml: 0,
opera: 0,
}
var ua = navigator.userAgent
if (window.opera) {
// 使用 window.opera 对象识别 Opera
engine.opera = window.opera.version()
} else if (/AppleWebKit\/(\S+)/.test(ua)) {
// Webkit 中 “AppleWebKit” 是独有的,故使用该字符串检测 Webkit
engine.webkit = RegExp['$1']
} else if (/KHTML\/(\S+)/.test(ua) || /Konqueror\/([^;]+)/.test(ua)) {
// Konqueror 早期版本中不包含 KHTML 版本,故使用 Konqueror 版本代替
engine.khtml = RegExp['$1']
} else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)) {
// Gecko 的版本号位于字符串“rv:”与一个闭括号之间
engine.gecko = RegExp['$1']
} else if (/MSIE ([^;]+)/.test(ua)) {
// IE 的版本号位于字符串“MSIE”的后面、一个分号的前面
engine.ie = RegExp['$1']
}
return engine
})()
—参考《JavaScript高级程序设计》