检测Internet Explorer的任何和所有版本

时间:2013-03-26 09:37:16

标签: javascript html internet-explorer internet-explorer-10 conditional-comments

通过在HTML中使用此技术,过去有一种很好的方式来判断Web浏览器是否为IE:

<!--[if IE]>
Non-IE browsers ignore this
<![endif]-->

<!--[if !IE]-->
IE ignores this
<!--[endif]-->

但是IE 10中的这个doesn't work anymore

知道如何使用其他网络浏览器(使用HTML或JavaScript)来告诉IE?

PS。我需要能够从非IE网络浏览器中告诉IE的任何版本

5 个答案:

答案 0 :(得分:9)

我很欣赏你的所有见解,但没有一个能回答我的实际问题。同样,我不是在询问特征检测。我需要知道的是,网络浏览器是否是IE浏览器。以下使用JavaScript,似乎适用于所有当前版本的IE(包括IE10):

<![if IE]>
<script type='text/javascript'>
if(/*@cc_on!@*/false)
var bIsIE = 1;
</script>
<![endif]>

然后检查它是否是IE,从JavaScript执行此操作:

if (typeof (bIsIE) != 'undefined')
{
    //The web browser is IE
}
else
{
    //The web browser is not IE
}

显然,上面的代码假设网络浏览器启用了JavaScript。但就我而言,浏览器检测只有在启用了脚本时才有意义。

答案 1 :(得分:4)

每个版本的Internet Explorer都与其他版本不同,就像每个版本的Chrome,Firefox和Opera都与其前辈不同。在开发网站时,您不会以“Microsoft”,“Google”或“Mozilla”等供应商为目标。 -

而不是问“我想使用::之后,这个浏览器是微软浏览器吗?”“你应该改为问”这个浏览器是否支持伪元素: :prefix?“这是功能检测,它几乎总是完美的目标。而不是猜测其供应商的浏览器能力,您可以通过它实际可以做的来确定它能够做什么。

这可能不是您正在寻找的答案,但它仍然是正确的答案。如果您正在询问如何识别所有Microsoft浏览器,那么您正在错误地接近问题(或您认为存在的问题)。

要获得正确的解决方案,我们建议您使用jQueryModernizr等工具。这些将处理API规范化,旧浏览器中较新元素的填充以及特征检测。这是正确做事的方式,开发人员从一开始就采用这种方法,你今天可能不会对Internet Explorer产生这样的厌恶。

答案 2 :(得分:3)

您在问题中提供的链接 - doesn't work anymore - 对于Windows Internet Explorer工程团队博客,会引出以下声明

  

条件评论

<!--[if IE]>

This content is ignored in IE10 and other browsers.

In older versions of IE it renders as part of the page.

<![endif]-->
     

这意味着仍然可以使用条件注释,但仅限于此   定位旧版本的IE。如果你需要区分更多   最近的浏览器,改为使用feature detection

在我看来,IE团队正在大力推动使用特征检测而不是浏览器检测,因为上面的特征检测链接显示了这一点。

  

相同标记:核心指南

**DO**
    Feature Detection
    Test whether a browser supports a feature before using it.
    Behavior Detection
    Test for known issues before applying a workaround. 
**DON'T**
    Detect Specific Browsers
    Also known as browser detection. Don't use the identity of a browser (e.g. navigator.userAgent) to alter page behavior.
    Assume Unrelated Features
    Don't perform feature detection for one feature, and then proceed to use a different feature.

因此,Windows Internet Explorer工程团队似乎正在设置IE,以便您无法对IE10及更高版本使用浏览器检测。

EDIT 我不使用IE10但是

navigator.appName=='Microsoft Internet Explorer';

在IE10中工作?

答案 3 :(得分:0)

仅仅说IE10足够好而忽略了这个问题是不够的。这实际上取决于你想要做什么。对于大多数用途,功能检测可能会满足您的需求。更复杂的路线是通过从HTTP请求标头中提取用户代理字符串来启动用户代理检测。如果你对此不小心,你很快就会出错。

在浏览器JS控制台中查看当前的用户代理字符串:

console.log(navigator.userAgent);

以下是各种浏览器中报告的用户代理字符串列表:

http://www.zytrax.com/tech/web/browser_ids.htm

请注意,所有MS Explorer代理字符串都将包含“MSIE”,但首先您必须清除像Opera这样的浏览器,在某些情况下还会包含“MSIE”字符串。

答案 4 :(得分:-1)

如果客户端浏览器 Internet Explorer ,则此函数返回true,并在版本 9-10-11 上进行测试。

function isIE(v) {
    var ie;
    ie = RegExp('msie' + (!isNaN(v)?('\\s'+v):''), 'i').test(navigator.userAgent);
    if (!ie) { ie = !!navigator.userAgent.match(/Trident.*rv[ :]*11\./) }
    return ie;
}

// Example
var ie = isIE();
var ie9 = isIE(9);
var ie10 = isIE(10);

注意:该功能不完整,不允许isIE(11)

相关问题