0

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

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

在 JavaScript 中检测 IE 版本(v9 之前)

但是我对 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>

如果有帮助,我可以发布我的网站 URL,但我不希望人们认为我正在尝试获得更多的网站流量或其他东西。

我知道我目前使用的代码可以稍微改进一下,但我宁愿在大扫除之前让事情正常工作。

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

任何帮助将不胜感激。

4

4 回答 4

5

处理此类问题时最好避免“浏览器检测”并使用“特征检测”

http://modernizr.com/这样的库将帮助您测试浏览器兼容的特定功能,而不是围绕不同版本的浏览器进行破解。

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

您会发现 IE10 遵守大量这些标准。

于 2013-06-07T16:53:58.690 回答
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}
于 2013-11-06T18:57:50.933 回答
0

最近我采用了css 浏览器选择器作为解决方案。它是一个将特定 css 类附加到文档根目录的 js,因此您可以处理 css 内浏览器中的样式差异而无需 hack。虽然它很旧并且不支持 IE10,但正如其他人所说,IE10 是相当标准的。它可以处理 IE6、7 和 8(而且您似乎对这些浏览器采取了特殊措施),所以我猜它对您有用。

一般来说,您应该避免像这样的特定于浏览器的黑客攻击或检查,因为它们难以维护并且不能保证始终有效。

于 2013-03-24T19:39:05.497 回答
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..)

于 2013-05-06T13:08:04.517 回答