繁体   English   中英

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

[英]Detecting any and all versions of Internet Explorer

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

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

要么

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

但这在IE 10 中不再起作用

不知道该用什么代替从其他网络浏览器(使用HTML或JavaScript)告诉IE?

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

我很欣赏你的所有见解,但没有一个能回答我的实际问题。 同样,我不是在询问功能检测 我需要知道的是,网络浏览器是否是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
}

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

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

而不是问“ 我想使用::之后,这个浏览器是微软浏览器吗? ”你应该问“ 这个浏览器是否支持::前缀上的伪元素? ”这是特征检测,它几乎是永远完美的目标。 而不是猜测其供应商的浏览器能力,您可以通过它实际可以做的事情来确定它的能力。

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

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

您在问题中提供的链接 - 不再起作用 - 这是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。 如果您需要区分更新的浏览器,请改用功能检测

在我看来,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 (eg 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及更高版本使用浏览器检测。

编辑我不使用IE10,但确实如此

navigator.appName=='Microsoft Internet Explorer';

在IE10工作?

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

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

console.log(navigator.userAgent);

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

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

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

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

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM