以前有一种通过 HTML 技巧来判断浏览器是否为 IE 的方法:
<!--[if IE]>
Non-IE browsers ignore this
<![endif]-->
或者
<!--[if !IE]-->
IE ignores this
<!--[endif]-->
但是在IE 10中,这个方法已经不再适用。
有什么其他的方法可以使用HTML或JavaScript来区分IE和其他的网页浏览器吗?
附注:我需要能够区分任何版本的IE和非IE网页浏览器。
以前有一种通过 HTML 技巧来判断浏览器是否为 IE 的方法:
<!--[if IE]>
Non-IE browsers ignore this
<![endif]-->
或者
<!--[if !IE]-->
IE ignores this
<!--[endif]-->
但是在IE 10中,这个方法已经不再适用。
有什么其他的方法可以使用HTML或JavaScript来区分IE和其他的网页浏览器吗?
附注:我需要能够区分任何版本的IE和非IE网页浏览器。
感谢您的所有见解,但它们都没有回答我的实际问题。再次说明,我不是在询问特性检测。我只需要知道当前使用的浏览器是否为IE。以下代码使用JavaScript编写,并且似乎适用于所有当前版本的IE(包括IE10):
<![if IE]>
<script type='text/javascript'>
if(/*@cc_on!@*/false)
var bIsIE = 1;
</script>
<![endif]>
然后通过JavaScript来检查是否为IE:
if (typeof (bIsIE) != 'undefined')
{
//The web browser is IE
}
else
{
//The web browser is not IE
}
很明显,上面的代码假设网页浏览器已启用JavaScript。但是在我的情况下,仅当脚本可用时,浏览器检测才相关。
if(/*@cc_on!@*/false)
块中,你是否遗漏了一些花括号和运算符?此外,该块应该检查什么? - Ryne Everetthref
为data:text/csv...
的情况。 - Snekse为了得到正确的解决方案,我建议您使用 jQuery 和 Modernizr 等工具。它们可以处理 API 标准化、在旧浏览器中模拟新元素以及特性检测。这是正确的做法,如果开发者一开始就采用这种方法,您今天可能不会那么讨厌 Internet Explorer 了。
Conditional Comments
<!--[if IE]> This content is ignored in IE10 and other browsers. In older versions of IE it renders as part of the page. <![endif]-->
This means conditional comments can still be used, but will only target older versions of IE. If you need to distinguish between more recent browsers, use feature detection instead.
我觉得IE团队正在强烈推动使用特性检测而不是浏览器检测,正如上面的特性检测链接中引用的那样。
Same Markup: Core Guidelines
**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工程团队正在设置IE10及以上版本,以使您无法使用浏览器检测。
编辑 我不使用IE10,但是
navigator.appName=='Microsoft Internet Explorer';
在IE10中工作?
仅仅说IE10足够好并忽略问题是不够的。这实际上取决于你想做什么。对于大多数目的,特性检测可能会处理你所需的内容。更加复杂的方法是通过从HTTP请求头中提取用户代理字符串来开始用户代理检测。如果你在使用时不小心,很容易出错。
要在浏览器JS控制台中查看当前的用户代理字符串:
console.log(navigator.userAgent);
这里是各种浏览器报告的用户代理字符串列表:
请注意,所有的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)