我需要检测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,但这看起来有点沉重。
我的条件评论方法不起作用的原因是什么?有更好的方法吗?
答案 0 :(得分:6)
<script type="text/javascript">
if (nothing_works) {
is_ie6 = true;
}
</script>
严重的是,您的条件评论可能是最好,最准确的检测方法。即使浏览器位于其用户代理中,也可能不会将条件注释解析为IE6。
我已经回家了,因为我已经知道有人还在为IE6开发。
答案 1 :(得分:5)
Paul Irish将an 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]-->