使用Javascript / jQuery重新检测IE6

时间:2010-08-05 21:40:50

标签: javascript jquery css internet-explorer-6 browser-feature-detection

我需要检测IE6才能解决缺乏位置问题:修复。我一直在使用一个简单的正则表达式:

var isIE6 = /msie|MSIE 6/.test(navigator.userAgent);

除了浏览器声称同时属于IE6和IE7的用户外,这几乎一直都有效:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.04506.30)

光辉。

我很想使用jquery.support,但看起来不支持查询position:fixed是否可用。所以我回来检测IE6。

有各种建议的解决方案,例如looking for the existence of maxHeight。但那些看起来相当随意并吓到我 - 如果上面的正则表达式有例外,我怎么能确定maxHeight没有例外?

我正在考虑使用条件评论 - 至少这将是IE本身声称是IE6,而不是黑客。类似的东西:

<!--[if IE 6]>
<SCRIPT> var isIE6 = true; </SCRIPT>
<![endif]-->

或者有一个f unction that directly tests if position:fixed is available,但这看起来有点沉重。

我的条件评论方法不起作用的原因是什么?有更好的方法吗?

6 个答案:

答案 0 :(得分:6)

<script type="text/javascript">
    if (nothing_works) {
        is_ie6 = true;
    }
</script>

严重的是,您的条件评论可能是最好,最准确的检测方法。即使浏览器位于其用户代理中,也可能不会将条件注释解析为IE6。

我已经回家了,因为我已经知道有人还在为IE6开发。

答案 1 :(得分:5)

Paul Irishan addition专门写入$.support专门用于检查position: fixed支持。我建议你尽可能使用功能检测而不是浏览器检测这条路线。

您只需要在该添加中包含最后一个函数,此部分:

$.support.positionFixed = (function() { ..... })();

在jQuery之后包含这个,然后你可以在你的代码中使用它,如下所示:

if(!$.support.positionFixed) {
  //handle browsers that don't support it
}

答案 2 :(得分:1)

我遇到克服IE问题的最佳方法是使用条件注释:

<!--[if IE 6]>
... link IE 6 specific stylesheet or a script...
<![endif]-->

此方法还可以使您的页面向前兼容,以便IE的未来版本可以呈现它而无需所有IE6(和更低)样式。

答案 3 :(得分:0)

http://api.jquery.com/jQuery.browser/

if ($.browser.msie && parseInt($.browser.version) == 6) {
  // do something
}

答案 4 :(得分:0)

关于功能检测的IE博客上有一篇很好的详细文章:

http://blogs.msdn.com/b/ie/archive/2010/04/14/same-markup-writing-cross-browser-code.aspx

基本上他们(可以理解)反对浏览器版本检测:

  

“不要:检测特定的浏览器”

浏览器存在很多场景(如您的示例所示),但最好使用功能检测。

答案 5 :(得分:0)

我说你也应该接受条件评论。它适用于CSS和JavaScript或者你想要放在那里的任何东西。在我看来,这是最好的选择。但我不会像你在你的例子中那样使用变量。我会寻找一个外部的ie6.js链接,它将覆盖你在原始的非ie6代码中所做的任何事情。这样,你就不会在干净的代码中获得ie6垃圾/变量。

<!--[if IE 6]>
<script type="text/javascript" src="ie6.js"></script>
<![endif]-->