首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Asp.net中用javascript检测IE 11

如何在Asp.net中用javascript检测IE 11
EN

Stack Overflow用户
提问于 2013-09-18 04:02:56
回答 10查看 37.2K关注 0票数 17

你好,我想检测浏览器,IE8或更多将适合我。为此,我使用了以下代码,但IE11失败了。对其他人来说,它的检测是正确的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function getInternetExplorerVersion()
{
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.$1);
    }
    return rv;
}

下面是我也试过但没有成功的链接。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-09-18 04:17:52

不做浏览器检测!它会崩溃,并且会给你带来问题。

IE11的用户代理字符串与以前的IE版本完全不同;它不再包含"MSIE“文本。这就是你的检测代码不能工作的原因。

重要的是要注意,他们这么做的原因是故意的。他们想破解像这样的浏览器检测脚本。

可以将代码更改为使用IE11,但我强烈建议不要这样做,因为当IE12出现时,您可能会再次遇到同样的问题。

那么,他们为什么要破坏浏览器检测脚本呢?简单:因为IE11没有以前版本的bug,而且它有很多新特性。因此,如果您进行浏览器检测是因为IE有某些错误或缺少特性,并且您有代码可以根据浏览器检测来修复这些问题,那么在不需要修复的IE11中,该代码实际上可能会导致更严重的问题。

IE11破坏了您的脚本,但是同样的逻辑适用于所有浏览器和所有版本;检测浏览器和版本几乎总是错误的。

如果有您想要支持的特定特性,但在旧的IE版本(或其他较旧的浏览器)中缺少,请不要使用浏览器检测来解决它;您应该使用特性检测

特征检测意味着检查浏览器是否支持要使用的特定功能。最常见的方法是使用现代派库。他们网站上的文档将引导你设置它。

在旧的IE版本中有一些很难检测的but,对于这几种情况,使用浏览器检测作为最后手段是有效的,但这些情况实际上只适用于IE6和更早的版本。也许对IE7来说是偶然的。但是您在问题中已经说过,您只查看IE8和以后的版本,所以这不应该适用。

坚持特征检测;它更可靠,更好的实践,并且不会突然崩溃,当一个新的浏览器版本发布。

票数 -10
EN

Stack Overflow用户

发布于 2013-11-25 11:45:22

您可以使用以下检查显式地检测IE11 (使用特性检测):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (Object.hasOwnProperty.call(window, "ActiveXObject") && !window.ActiveXObject) {
    // is IE11
}

说明: IE的所有版本(非常旧的除外)都有window.ActiveXObject属性。然而,IE11将该属性隐藏在DOM中,而该属性现在尚未定义。但是属性本身存在于对象中,因此在所有IE版本中检查属性存在都会返回true,但在IE11中,它也会返回false以进行第二次检查。最后,通过对象调用hasOwnProperty,因为在IE8 (我相信在前面)中,window不是instanceof Object,也没有hasOwnProperty方法。

另一种方法,使用userAgent字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var ua = window.navigator.userAgent;
var versionSplit = /[\/\.]/i;
var versionRe = /(Version)\/([\w.\/]+)/i; // match for browser version
var operaRe = /(Opera|OPR)[\/ ]([\w.\/]+)/i;
var ieRe = /(?:(MSIE) |(Trident)\/.+rv:)([\w.]+)/i; // must not contain 'Opera'
var match = ua.match(operaRe) || ua.match(ieRe);
if (!match) {
    return false;
}
if (Array.prototype.filter) {
    match = match.filter(function(item) {
        return (item != null);
    });
} else {
    // Hello, IE8!
    for (var j = 0; j < match.length; j++) {
        var matchGroup = match[j];
        if (matchGroup == null || matchGroup == '') {
            match.splice(j, 1);
            j--;
        }
    }
}
var name = match[1].replace('Trident', 'MSIE').replace('OPR', 'Opera');
var versionMatch = ua.match(versionRe) || match;
var version = versionMatch[2].split(versionSplit);

如果IE的userAgent字符串没有被欺骗,这将检测到任何版本的IE。

在非常罕见的情况下,您实际上需要使用浏览器检测,如前所述。在大多数情况下,特征检测方法是较好的方法。

票数 54
EN

Stack Overflow用户

发布于 2013-10-25 01:04:03

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 isIE11 = !!window.MSStream;

 if(isIE11){
   /* Something */
 }
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18871760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文