使用jQuery检测Firefox浏览器

14

我遇到了一个问题,当Firefox低于2.0时,我的CSS存在一些错误。我想要检测浏览器以修复我的CSS bug。

这是我的代码:

$(document).ready ( 
 function() {
  if ( $.browser.mozilla == true && $.browser.version < '3.0' ) {
   $('img.frameMargin').css('margin-left','35px');
  }
 }
);

但是这段代码似乎不起作用。

提前感谢。


2
我想强调的是,在可扩展性和可维护性方面,“特性检测”胜过“浏览器检测”。我认为你可能想看看$.support.boxModel - Richard Neil Ilagan
请查看 @richardneililagan 的评论。在这里,特征检测确实可能是更好的选择。如果浏览器制造商更改了其版本号格式,它将更具有未来性。 - joekarl
4个回答

30

这个问题已经在这个讨论中得到了回答: 在Javascript中,如何确定我的当前浏览器是Firefox而不是其他所有浏览器?

为了回答您在那篇文章中的问题,感谢"BalusC"的答案:

var FF = !(window.mozInnerScreenX == null);
if(FF) {
    // is firefox 
} else { 
    // not firefox 
}

以上帖子建议使用jQuery.browser。但是jQuery API建议不要使用此方法(请参见API文档)。
jQuery API建议使用'jQuery.support'(http://api.jquery.com/jQuery.support/)。原因是jQuery.browser使用可以被欺骗的用户代理,并且在后续版本的jQuery中已经过时。最好使用功能检测而不是浏览器检测。
更新:
自1.9版本起,jQuery.browser已从jQuery中删除。

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

如果你真的需要使用它... jQuery.browser已经作为单独的jQuery插件移植过来了。

https://github.com/gabceb/jquery-browser-plugin

希望能帮到你。

2
我刚刚遇到了这个问题。$.browser.version实际上检测的是渲染引擎的版本,而不是浏览器的版本(尽管其名称暗示了这一点),因此如果您想检测Firefox 4及更高版本,则应使用:
$.browser.mozilla && $.browser.version > '2'

因为Firefox 4使用Gecko 2.0作为渲染引擎。我知道这有点令人困惑 :)

1

你需要这样做...

$.browser.version < '1.9'

FireFox 2 应该返回 1.8... 所以这将通过。

2
jQuery API文档建议不要使用$.browser。http://api.jquery.com/jQuery.browser/ .. 更好的方法是使用特征检测而不是检查可以伪造的浏览器用户代理.. $.browser测试用户代理.. jQuery API建议使用$.support.. 但在这种情况下,请尝试测试window.mozInnerScreenX是否存在.. - Jonathan Marzullo

1
在我的机器上(Mac OS X 10.6),Firefox 4中的$.browser.version报告"2.0"。所以,看起来你的代码是有效的,但JQuery存在问题。
http://api.jquery.com/jQuery.browser/

我们建议不要使用此属性,请尝试使用功能检测(请参见jQuery.support)。

如果您需要在Javascript中进行可靠的浏览器检测,请查看在线教程之一(例如this one)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接