Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测任何和所有版本的Internet Explorer_Javascript_Html_Internet Explorer_Internet Explorer 10_Conditional Comments - Fatal编程技术网

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

Javascript 检测任何和所有版本的Internet Explorer,javascript,html,internet-explorer,internet-explorer-10,conditional-comments,Javascript,Html,Internet Explorer,Internet Explorer 10,Conditional Comments,通过在HTML中使用此技术,过去有一种很好的方法来判断web浏览器是否为IE: <!--[if IE]> Non-IE browsers ignore this <![endif]--> 或 我忽略了这一点 但这是IE10中的问题 你知道用什么来代替IE与其他web浏览器(使用HTML或JavaScript)的区别吗 另外,我需要能够从非IE网络浏览器中分辨出任何版本的IE。您在问题中给出的链接,即指向Windows Internet Explorer工程团队博

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

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


我忽略了这一点
但这是IE10中的问题

你知道用什么来代替IE与其他web浏览器(使用HTML或JavaScript)的区别吗


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

您在问题中给出的链接,即指向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]-->
因此,Windows Internet Explorer工程团队似乎正在设置IE,以便您无法对IE10及以上版本使用浏览器检测

编辑 我不使用IE10,但使用IE10

navigator.appName=='Microsoft Internet Explorer';

在IE10中工作?

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

要在浏览器JS控制台中查看当前用户代理字符串,请执行以下操作:

console.log(navigator.userAgent);
以下是各种浏览器中报告的用户代理字符串列表:


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

每个版本的Internet Explorer都不同于其他版本,正如每个版本的Chrome、Firefox和Opera都不同于其前身一样。当你开发以功能为目标的网站时,你不会以“微软”、“谷歌”或“Mozilla”等供应商为目标

与其问“我想使用::after,这个浏览器是Microsoft浏览器吗?”不如问“这个浏览器支持::前缀上的伪元素吗?”这是功能检测,而且几乎总是完全符合目标。与其猜测一个浏览器的供应商能做什么,不如通过它实际能做什么来确定它能做什么

这可能不是你想要的答案,但它仍然是正确的答案。如果您询问如何识别所有Microsoft浏览器,那么您处理问题的方式(或您认为是问题的方式)不正确


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

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


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

如果客户端浏览器是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)

,您不需要这样做。IE10基本上符合标准。不要试着为特定的浏览器编写,试着遵循标准,IE10应该能很好地运行。你在IE中遇到的具体问题是什么?@c00000fd-你链接的文章是关于IE9的。看一看。IE10为现代技术提供了更好的支持。你的条件性评论将和IE9一样有效。说真的,IE10真的不是那么糟糕的浏览器(事实上,我认为jQuery对Chrome的修复要比IE10多)。还有很多人在使用动画GIF,而且没有问题。请提出一个单独的问题,解释你遇到的具体问题;几乎可以肯定的是,SO collective将能够帮助您修复它,使其在所有浏览器中都能完美工作,而无需任何浏览器检测黑客。正如上面许多其他人所说,与其应用全面的IE修复,不如使用它来查找您正试图使用的特定功能。+1,因为有时候你只是不想在缺陷浏览器的功能检测上乱来。但是在
if(/*@cc\u on!@*/false)
块中,您不缺少一些花括号和运算符吗?另外,该块应该检查什么?某些特征是无法检测到的。我试图检测IE,因为它不支持
数据:text/csv…
href
,这是功能检测的一个问题,没有人会提到:在所有版本的IE中,都不能将CORS与canvas toDataURL()一起使用,因为它会将画布标记为脏,即使使用CORS也是如此。然而,在CORS上对IE9+进行功能检测将被认为是“是的”,这只是IE处理toDataUrl()的一个怪癖。您可以尝试{}捕获{}错误,但不要麻烦,因为IE不会“捕获”toDataUrl()调用,它将作为一个安全错误从try{}中断。在尝试toDataUrl之前,最好只检测“这是IE吗?”并为IE使用本地代理,而不是为sane浏览器禁用CORS
console.log(navigator.userAgent);
<![if IE]>
<script type='text/javascript'>
if(/*@cc_on!@*/false)
var bIsIE = 1;
</script>
<![endif]>
if (typeof (bIsIE) != 'undefined')
{
    //The web browser is IE
}
else
{
    //The web browser is not IE
}
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);