var client = function(){ var engine = { // 呈现引擎 ie: 0, gecko:0, webkit: 0, khtml:0, opera:0, //其他版本号 ver: null }; // 在此检测呈现引擎,平台和设备 return { engine: engine }; }();
在如上client对象字面量中,每个呈现引擎都对应着一个属性,属性值默认为0;如果检测到了那个呈现引擎,那么将以浮点数值形式将引擎的版本号写入相应的属性。而呈现引擎的完整版本被写入变量ver属性中;
要正确识别呈现引擎,关键是检测顺序要正确,用户代理字符串存在诸多不一致的地方,如果检测顺序不对,很可能会导致检测结果不正确,因此,第一步就是识别Opera,因为它的用户代理字符串有可能模仿其他浏览器;目前最新的opera浏览器版本是29,所以如下:
var ua = navigator.userAgent .toLowerCase(); console.log(ua);
打印如下:
复制代码 代码如下:
mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/42.0.2311.152 safari/537.36 opr/29.0.1795.60
因此可以这样判断代码;如下:
var ua = navigator.userAgent.toLowerCase(); if(ua.match(/opr\/([\d\.]+)/)) { var result = ua.match(/opr\/([\d\.]+)/); console.log(result) console.log(result[1]) }
执行如下:
console.log(result);打印如下:
复制代码 代码如下:
["opr/29.0.1795.60", "29.0.1795.60", index: 110, input: "mozilla/5.0 (windows nt 6.1; wow64) applewebkit/53…rome/42.0.2311.152 safari/537.36 opr/29.0.1795.60"];
console.log(result[1])打印如下:
复制代码 代码如下:
29.0.1795.60
由此;我们可以这样编写代码;如下:
var ua = navigator.userAgent.toLowerCase(); if(ua.match(/opr\/([\d\.]+)/)) { var result = ua.match(/opr\/([\d\.]+)/); engine.ver = result[1]; engine.opera = parseFloat(engine.ver); }
现在我们来打印下console.log(engine);如下所示:
但是呢opera29之前的版本, Opera5+也有window.opera对象,所以我们也必须检测window.opera对象,我们可以调用version()方法可以返回一个表示浏览器版本的字符串;如下代码:
if(window.opera) { engine.ver = window.opera.version(); engine.opera = parseFloat(engine.ver); }
现在我们为了兼容之前及之后的opera浏览器,我们可以综合一下;如下:
var engine = client; var ua = navigator.userAgent.toLowerCase(); if(ua.match(/opr\/([\d\.]+)/) || window.opera) { var result = ua.match(/opr\/([\d\.]+)/); engine.ver = result[1]; engine.opera = parseFloat(engine.ver); if(window.opera) { engine.ver = window.opera.version(); engine.opera = parseFloat(engine.ver); } }