繁体   English   中英

使用Javascript / jQuery重新检测IE6

[英]Detecting IE6 using Javascript/jQuery revisited

我需要检测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。

有各种建议的解决方案,例如寻找maxHeight的存在 但那些似乎相当随意并吓到我 - 如果上面的正则表达式有例外,我怎么能确定maxHeight没有例外?

我正在考虑使用条件评论 - 至少它是IE本身声称是IE6,而不是黑客。 就像是:

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

或者,可以直接测试position:fixed是否可用 ,但这看起来有点沉重。

我的条件评论方法不起作用的任何原因? 有更好的方法吗?

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

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

我已经知道有人还在为IE6开发,我必须回家哭一点。

Paul Irish$.support 添加一个专门用于检查position: fixed 的补充 position: fixed支持。 我建议您尽可能使用功能检测而不是浏览器检测。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM