为什么使用window.navigator.userAgent检索浏览器Explorer 11被识别为Mozilla?如何检索用户的angent和版本?

时间:2015-09-07 09:40:01

标签: javascript jquery html user-agent

我是JavaScript和JQuery的新手,我疯狂地尝试实现一个简单的脚本来检测浏览器是否是 Internet Explorer 及其版本。

所以我正在做这样的事情:

$( document ).ready(function() {

    //alert(navigator.appName);
    //alert(navigator.appCodeName);
    //alert(navigator.appVersion);
    //alert(navigator.platform);
    //alert(window.navigator.userAgent);

    var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");

    console.log("USER AGENT: " + ua);
    console.log("MSIE: " + msie);
});

问题是将页面运行到 Explorer 11 到控制台日志中我获取此消息:

USER AGENT: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3; GWX:QUALIFIED; ASU2JS; rv:11.0) like Gecko

MSIE: -1

如何将其识别为Mozilla而不是IE?

我需要识别浏览器是否是Internet Explorer及其版本。

我该怎么做这个操作?

3 个答案:

答案 0 :(得分:6)

据微软称,IE11的用户代理字符串专门用于欺骗UA解析器将其识别为其他内容。 资料来源:http://blogs.msdn.com/b/ieinternals/archive/2013/09/21/internet-explorer-11-user-agent-string-ua-string-sniffing-compatibility-with-gecko-webkit.aspx

即使在上面的文章中提到过,我也会重复这一点。 如果您想进行UA嗅探,请三思而行。功能检测是处理浏览器兼容性的推荐方法。有关详细信息,请参阅文章。

答案 1 :(得分:4)

IE 11在发布时打破了所有客户端检查脚本。正如你所说,它现在报道为" Mozilla"并且不再报告MSIE。就我记忆中的情况而言,他们所做的决定就是这样做,因为IE11应该更多地基于Gecko引擎,而不是Mozilla。为了说明这一点,Microsoft决定将User-Agent字符串更改为不同的字符串。我知道测试IE11的最佳方法是检查" Trident / 7.0"这应该是所有IE11浏览器的通知。

  

Mozilla / 5.0(Windows NT 6.1; WOW64; Trident / 7.0 ; rv:11.0),如Gecko

无论如何,正如许多人建议的那样,最好检查功能而不是依赖浏览器检查。

答案 2 :(得分:0)

请尝试以下代码。

var ua = window.navigator.userAgent;
    var msie = ua.indexOf("MSIE ");
    var rv = -1;

    if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer, return version number
    {               

        if (isNaN(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))))) {
            //For IE 11 >
            if (navigator.appName == 'Netscape') {
                var ua = navigator.userAgent;
                var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
                if (re.exec(ua) != null) {
                    rv = parseFloat(RegExp.$1);
                    alert(rv);
                }
            }
            else {
                alert('otherbrowser');
            }
        }
        else {
            //For < IE11
            alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
        }
        return false;
    }}