用户代理检测

此方法获取用户代理并解析它以查找浏览器。浏览器名称和版本通过正则表达式从用户代理中提取。基于这两个,返回 <browser name> <version>

用户代理匹配代码之后的四个条件块旨在解释不同浏览器的用户代理的差异。例如,在 Opera 的情况下,由于它使用 Chrome 渲染引擎 ,因此还有一个忽略该部分的步骤。

注意,该方法可以容易地被用户欺骗。

navigator.sayswho= (function(){
    var ua= navigator.userAgent, tem,
    M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if(/trident/i.test(M[1])){
        tem=  /\brv[ :]+(\d+)/g.exec(ua) || [];
        return 'IE '+(tem[1] || '');
    }
    if(M[1]=== 'Chrome'){
        tem= ua.match(/\b(OPR|Edge)\/(\d+)/);
        if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
    }
    M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
    return M.join(' ');
})();

感谢肯纳贝克