使用JQuery检测浏览器

6

我正在尝试使用

    jQuery(document).ready(function () {
        if (!jQuery.browser.msie <= 7.99) {
                jQuery('#element').css('display', 'block');
        }
    });

但是看起来它似乎不起作用?我做错了什么吗?

谢谢

编辑:使用条件注释

<!--[if !IE]>
<!--[if lt IE 8]> 

//do stuff
<![endif]-->
<![endif]-->

4
你想要检查什么?如果可能的话,你应该使用特性检测而不是浏览器检测。 - Nick Craver
标准做法是测试特定的功能而不是浏览器行为。你到底想要实现什么? - jasonpgignac
哪个具体的场景出现了问题?IE 8是否看起来像IE7?如果是这样的话...“请注意,IE8在兼容视图中声称自己是7”- 来自jQuery文档 - Jeff Sternal
我正在尝试的是 - 如果#element仅在IE7上,则将CSS保留为display:none; - 否则在其他所有浏览器中更改它。这是因为CSS首先呈现,而我使用的滑块对于依赖JS太慢了。 - Tom
啊,对了 - 它们实际上是相同的东西,对吧?但为了让每个人都开心 :) = 我会使用.boxModel,它将检测IE6 / IE7。 - Tom
显示剩余7条评论
6个回答

7

jQuery.browser.version 是你要查找的内容。而且你可能需要对其进行 parseFloat 处理。

总的来说,除非没有其他方法进行特性检测,否则依赖于浏览器探测是不被看好的。如果你能告诉我们你的真正问题,那么可能会有帮助。

编辑:你应该使用条件注释为 IE7 及以下版本提供规则/样式表。


我正在尝试做的事情是:如果#element仅在IE7上,则将CSS保留为display:none; - 否则在其他所有浏览器中更改它。这是因为CSS首先呈现,而我正在使用的滑块对JS依赖太慢了。 - Tom
你可以使用CSS和IE条件语句(而不是JS)。 - meder omuraliev
是的,但我更倾向于不使用条件语句,因为 Google Pagespeed 不喜欢这样做。 - Tom
1
你不应该让这样的应用程序告诉你在实际解决方案中能做什么或不能做什么。谷歌不应该是告诉你代码好坏的人,看看Gmail,糟糕的编码工作。 - meder omuraliev
@Tom - 在这种情况下,Pagespeed是错误的...如果它检查了这个问题,它会建议使用条件样式表而不是JavaScript/用户代理检测。 - Nick Craver
啊,好的。嗯,这让我非常困惑,所以我才去寻找jquery.browser。 - Tom

3
这在我的有限测试中似乎是有效的:
jQuery(document).ready(function () {
  if(jQuery.browser.msie){
     if(parseFloat(jQuery.browser.version) < 8){
        //Versions of IE less than 8
        jQuery('#element').css('display', 'block');
     }
     else{
       //code for versions of IE at least 8 (currently 8 and 9)
     }
  }
  else{
     //code for browsers other than IE (Firefox Safari, chrome, Opera, etc.)
  }
});

嘿,谢了。但是这只适用于MSIE吧,即测试MSIE然后执行某些操作。我需要每个其他浏览器,但是 <8 ? - Tom
@Tom 我不确定你想做什么,所以我修改了我的代码,展示了在你可能尝试处理的每种情况下放置代码的位置。 - Adam

3

这并没有回答你具体的问题,但我提出一个更简单的方法。使用IE条件注释来给你的body标签应用特定的ID。例如:

<!--[if !IE]> -->
<body>
<!--<![endif]-->
<!--[if IE 7]>
<body id="IE7">
<![endif]-->

然后,通过jQuery检测它就变得非常简单了:
if($('body').is('#IE7'))...

2
您应该使用条件注释来实现此功能,这样更快、更简单、更短,如下所示:
<!--[if lt IE 8]>
  <style type="text/css">#element { display: none; }</style>
<![endif]-->

这将在IE7及以下版本上隐藏元素。 您不需要任何脚本,只需从原始样式表(或内联)中删除当前用于初始隐藏的display:none即可。 关于Google Pagespeed不喜欢此的评论……请忽略它,如果您必须修复IE7错误,请以正确的方式修复。 这更快,更简单……如果Pagespeed能够检查您是否使用用户代理来执行此操作(jQuery.browser这样做),它将建议不要这样做,只是没有机制告诉您这是一个更糟糕的方法。

0
jQuery.browser.msie

返回真或假

jQuery.browser.version

是检查浏览器版本的函数。


0
你可以使用jQuery浏览器插件。它会给你一个包含有关正在使用的浏览器的所有信息的JavaScript对象。
例如:
  • browser.name: 正在使用的浏览器的名称。
    alert($.browser.name); // 这将弹出'firefox'
  • browser.versionNumber: 浏览器的版本(注意:作为整数)。
    alert($.browser.versionNumber); // 这将弹出'30'
我个人发现它非常简单易用。缩小版仅为1.44KB。请参考链接。

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