使用JavaScript进行可靠的浏览器检测?

5
我有一个网站,和大多数网站一样,它在Firefox中加载速度更快。
我想创建一个顶部栏,在没有Firefox的用户进入网站时显示。这个栏会说一些类似于“安装Firefox以获得更好的性能等等…”的话。
我应该怎么做?我猜是浏览器检测,但有很多不同的代码。你们知道更可靠、更好用的代码吗?
顺便问一下,有没有人知道我是否需要从Mozilla那里得到许可才能在我的网站上放置这样的栏?
谢谢!
编辑:FF并不是最快的浏览器,我明白了!

IQ插曲!Firefox和Lynx的关系就像法拉利和...... - littlegreen
3
使用一个80x25基于文本的雷达屏幕。 - littlegreen
4
为什么有些人会在回答或评论问题时,提及与问题毫不相关的内容。这个问题是关于如何检测浏览器的,我在问题中从未提到“FF比Chrome或Lynx更快”之类的话。请专注于问题本身。 - user188962
2
@Carman - 关于你想做的事情的优点的讨论并不是完全不同的话题,而且你说“在Firefox中加载速度更快”和“一个没有FF的用户”。虽然你没有提到任何其他特定的浏览器,但暗示是你在谈论所有浏览器(否则,为什么不说,“在Firefox然后IE”和“一个有IE的用户”呢?)。 - Quentin
4
@David - 我不同意你的评论(“Firefox比Lynx慢得多”),它与这个问题几乎没有什么关系,如果有任何关联的话。 - user188962
显然,两个浏览器之间的(幽默的)速度比较与如何因为浏览器速度而抱怨别人的问题完全无关。 - Quentin
8个回答

10

(跳过所有关于你想做的事情是好还是坏的争论。假设你真的喜欢火狐浏览器并想推广它。)

  1. 使用navigator对象来检查浏览器是否为Firefox。 navigator.appCodeNamenavigator.appNamenavigator.appVersion。由于你想要做的不是网站的重要部分,所以不需要一个安全的失败检测方法。如果能覆盖95%以上的目标用户,那么这种方法就很好了。

  2. 我怀疑你是否需要获得宣传免费产品的许可。Mozilla甚至鼓励你这样做。


8
您可能对spreadfirefox.com上的这个页面感兴趣:http://www.spreadfirefox.com/affiliates/utw。它包含一组Spread Firefox按钮,但更有趣的是附带的代码。您会注意到,按钮的图像实际上会根据您所使用的浏览器而改变:
(来源:mozilla.org)
(来源:mozilla.org)
(来源:mozilla.org)
(来源:mozilla.org) 查看Javascript代码,您会发现他们已经为您做好了这项工作:
/* *********************************************
This code came from http://www.quirksmode.org/js/detect.html 
In order for this to function properly, it must be updated regularly
***********************************************/

那么为什么不修改他们给出的代码来适应你的图片或代码呢?或者更好的是,使用他们已经准备好的代码?


6

jQuery拥有浏览器检测功能。

然而,jQuery开发者们认为你不应该根据浏览器选择,而应该根据浏览器支持的功能进行选择。因此,他们推荐使用浏览器特性检测。这很有道理。


这个在jQuery 1.9中被移除了。 - Michael Konečný

4

没有100%可靠的浏览器检测方法。访问navigator对象提供的userAgent字符串不可靠,因为用户可能会伪造它。访问现在只存在于特定浏览器中的某些属性可能是可靠的,但将来可能不再可靠,因为你永远不知道另一个浏览器是否会应用该属性或该属性是否会在未来版本中被删除。


2
如果用户伪造了userAgent,那么很明显他没有意图更改浏览器。因此,在这种情况下不需要进行检测。请注意,此检测仅用于推广。 Firefox实际上并不需要查看网站。 - Alin Purcaru

4
这可能不是你问题的答案,但你可以在HTML代码中使用条件注释来实现,像这样: http://www.quirksmode.org/css/condcom.html 你可以使用此代码检测任何IE版本。
除非你被Mozilla基金会雇用,否则我不认为应该向使用Chrome、Safari和类似浏览器的用户发送此消息。他们做出了积极的选择并选择了自己的浏览器,而这是绝大多数可能不知道替代品的IE用户所不能说的。 主要问题在于Internet Explorer。
如果这个回答有点跑题或者没有帮助到你,我很抱歉。
/道德谴责结束 ;)

2
我认为浏览器检测并不是解决某些问题的正确方法。如果你的代码在其他浏览器上运行缓慢,应首先调查原因,清理和优化你的代码,然后如果问题仍未解决,可以选择为其他浏览器提供降低功能的选择。但请不要建议用户在计算机上安装任何软件。

没问题,对于贬低票无所谓。这是我真正的想法。浏览器检测是最后的选择,至少对我来说是这样。我不喜欢把灰尘藏在地毯下面。 - fcalderan

2

好的,所以我得到了-1分,因为我不喜欢Firefox,还是因为我没有把解决方案放在你手中供你复制和粘贴?那么这里是解决方案:

<!--[if IE]>
Special instructions for IE
<![endif]-->

并且在jQuery中

if ($.browser.msie)

1

我认为那不是一个好主意。其他浏览器如Chrome或Safari呢?现在,Chrome比Firefox更快(Sunspider测试),所以你的说法“它在Firefox中加载得更快”并不正确。比什么更快?如果你指的是IE,那么网上已经有许多解决方案来警告用户不要使用IE,而改用其他浏览器。你不应该只偏爱一种浏览器。


根据网页的不同,我的页面在使用火狐浏览器时加载速度更快。而且我不仅仅追求速度,火狐浏览器比谷歌浏览器做得更好,至于Safari浏览器,我没有太多经验。 - user188962
3
你的网站并不是独一无二的。除非它展示了最新浏览器技术的演示(这种情况下受众智商足够高,能够识别类似“Firefox新-moz-smell属性演示”的标题),否则我不会仅仅因为有一个(我通常认为相对较慢的)浏览器在渲染你的网站上更快就改变浏览器选择。你最好花时间尝试提高性能,比如在其他浏览器中分析任何JavaScript代码,找出慢的部分并加以改进。 - Quentin

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