3

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

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

或者

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

但这在 IE 10中不再起作用。

知道用什么来告诉 IE 与其他 Web 浏览器(使用 HTML 或 JavaScript)吗?

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

4

5 回答 5

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
}

显然,上面的代码假定 Web 浏览器启用了 JavaScript。但在我的情况下,浏览器检测仅在启用脚本时才相关。

于 2013-04-02T06:52:08.430 回答
5

Internet Explorer 的每个版本都与其他版本不同,就像 Chrome、Firefox 和 Opera 的每个版本都与它们的前辈不同一样。当您开发网站时,您不会针对诸如“Microsoft”、“Google”或“Mozilla”之类的供应商——您针对的是功能。

而不是问“我想使用 ::after,这个浏览器是微软浏览器吗? ”你应该问“这个浏览器是否支持 :: 前缀上的伪元素? ”这是特征检测,它几乎总是完美地瞄准目标。与其猜测浏览器的供应商能做什么,不如通过它实际能做什么来确定它能做什么。

这可能不是您要寻找的答案,但它仍然是正确的答案。如果您询问如何识别所有 Microsoft 浏览器,则说明您正在错误地处理问题(或您认为是问题的内容)。

对于适当的解决方案,我鼓励您使用jQueryModernizr等工具。这些将处理 API 规范化、旧浏览器中新元素的填充以及特征检测。这是做事的正确方法,如果开发人员从一开始就采用这种方法,那么您今天可能不会对 Internet Explorer 如此反感。

于 2013-03-26T18:19:40.363 回答
3

您在问题中提供的链接- 不再起作用-指向 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 (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 及更高版本使用浏览器检测。

编辑我不使用 IE10 但确实

navigator.appName=='Microsoft Internet Explorer';

在 IE10 中工作?

于 2013-03-26T10:11:45.387 回答
0

仅仅说 IE10 足够好而忽略这个问题是不够的。这真的取决于你想要做什么。对于大多数目的,特征检测可能会处理您需要的内容。更复杂的方法是通过从 HTTP 请求标头中拉入用户代理字符串来启动用户代理检测。如果你对此不小心,你很快就会出错。

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

console.log(navigator.userAgent);

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

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

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

于 2013-03-26T16:47:27.183 回答
-1

true如果客户端浏览器是Internet Explorer (在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)

于 2015-07-20T10:42:44.407 回答