IE10中的JavaScript浏览器检测

时间:2013-03-24 19:31:29

标签: javascript internet-explorer-10

我正在更新我的网站设计,因为它在IE10中无法正常工作。

我正在使用条件注释和JavaScript的组合来处理IE版本检测,但由于IE10已经放弃了前者而我没有找到理由忽略后者,我在这里寻求帮助。我一直在读这个帖子:

Detect IE version (prior to v9) in JavaScript

但我对JavaScript的了解并不远,所以我不确定是否应该修改我的代码或废弃它并采用和更改该URL中提到的代码(如果是的话,我是怎么做的应该这样做。)

我目前正在使用的代码:

<link rel="stylesheet" type="text/css" href="barebones.css">

  <!--[if lte IE 8]>
    <link rel="stylesheet" type="text/css" href="ie.css">
  <![endif]-->

  <!--[if gt IE 8]>
    <link rel="stylesheet" type="text/css" href="default.css">
  <![endif]-->

<script type="text/javascript">
    //<![CDATA[
    var appName = window.navigator.appName;
if (appName !== "Microsoft Internet Explorer")
document.write("<link rel=\"stylesheet\" type=\"text\/css\" href=\"default.css\" \/>");//]]>
</script>

如果有帮助我可以发布我的网站网址,但我不希望别人认为我想要获得更多的网站流量等。

我知道我目前正在使用的代码可以稍微改进一下,但我宁愿在春季清洁之前让事情有效。

多台机器上的IE10似乎完全忽略了JavaScript,我不知道为什么。 IE9处理得很好。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:5)

最好在处理这类问题时避免“broswer检测”并使用“特征检测”

http://modernizr.com/这样的库可以帮助您测试浏览器兼容的特定功能,而不是浏览不同版本的浏览器。

话虽如此,IE10往往是符合标准的浏览器。您可以访问http://caniuse.com/并查找各种JavaScript和CSS功能的图表以及所有不同浏览器中支持的功能。

你会发现IE10遵守了很多这些标准。

答案 1 :(得分:2)

虽然我喜欢上面的一些答案,但我知道有时可以通过一系列可能的快速解决方案来解决问题,这有时会产生重大影响。因此,这是另一个我发现效果很好的解决方案:

<script language="javascript" type="text/javascript">
    if(Function('/*@cc_on return 10===document.documentMode@*/')()) document.documentElement.className+= ' ie10';
</script>

然后在我添加的相应css文件中实现特定于浏览器的css规则(例如):

.ie10 div{new css rule}
.ie10 div{another new css rule}

答案 2 :(得分:0)

最近我采用css browser selector作为解决方案。它是一个将特定的css类附加到文档根目录的js,因此您可以在css中的浏览器中处理样式差异而不会出现黑客攻击。它虽然很老,但不支持IE10,但正如其他人所说,IE10非常标准。它虽然处理IE6,7和8(你似乎对这些浏览器采取了特殊措施),所以我猜它会适合你。

一般情况下,您应该避免浏览器特定的黑客攻击或类似检查,因为它们很难维护,并且不能保证始终有效。

答案 3 :(得分:0)

由于IE10无法识别条件注释,您需要检测浏览器版本,因此我实现了一个功能:

    function getIEVersion() {
        if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { 
        /*
         * sample user-Agent
         * "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)" 
         */
         //test for MSIE x.x;
         var ieversion = new Number(RegExp.$1); // capture x.x portion and store as a number
         return ieversion;
        }
    return -1;
    }

    alert(getIEVersion());

它返回IE版本的编号。 (例如:10,9,7 ..)