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

Posted

技术标签:

【中文标题】使用 javascript 进行可靠的浏览器检测?【英文标题】:Reliable browser detection with javascript? 【发布时间】:2011-05-11 22:10:40 【问题描述】:

我有一个网站,与大多数网站一样,它在 Firefox 中加载速度更快。

我想创建某种形式的栏,当没有 FF 的用户进入网站时,它会显示在我的网站顶部。 这个栏会说“安装 FF 以获得更好的性能等……”

我应该怎么做?我猜是浏览器检测,但那里有很多不同的代码。大家都知道有哪些更可靠、更好用的代码吗?

顺便说一句,有人知道我是否需要 Mozilla 的许可才能在我的网站上设置这样的栏?

谢谢

编辑:FF 不是最快的浏览器,我明白了!

【问题讨论】:

智商插曲! Firefox 之于 Lynx 就像法拉利之于...... ...带有 80x25 的基于文本的雷达屏幕。 为什么人们甚至对与问题完全不同的主题给出答案或cmets。问题是如何检测浏览器,我从来没有在问题中说“FF 比 Chrome 或 Lynx 快”。请坚持这个问题。 @Carman — 讨论你想做的事情的优点与问题的主题完全不同,你说“它在 Firefox 中加载速度更快”和“没有 FF 的用户”。虽然您没有提及任何其他特定的浏览器,但暗示您正在谈论所有浏览器(否则,您为什么不说,例如,“在 Firefox 中然后 IE”和“使用 IE 的用户”?)。 @David - 我不同意,你给出的评论(“Firefox 远没有 Lynx 快”)与这个问题几乎没有关系,如果有的话。 【参考方案1】:

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

    使用navigator 对象检查浏览器是否为Firefox。 navigator.appCodeNamenavigator.appNamenavigator.appVersion。您想要做的不是您网站的关键部分,因此您不需要故障安全检测方法。如果它适用于超过 95% 的目标用户,那么该方法就很好。

    我怀疑您需要获得许可才能宣传免费产品。 Mozilla 甚至 encourages 你这样做。

【讨论】:

【参考方案2】:

您可能对 spreadfirefox.com 上的此页面感兴趣:http://www.spreadfirefox.com/affiliates/utw。它包含一组Spread Firefox 按钮,但更有趣的是它附带的代码。您会注意到按钮的图像实际上会根据您在哪个浏览器上查看而改变:

(来源:mozilla.org)

(来源:mozilla.org)

(来源:mozilla.org)

(来源:mozilla.org)

查看Javascript code,您可以看到他们已经在为您完成工作:

/* *********************************************
This code came from http://www.quirksmode.org/js/detect.html 
In order for this to function properly, it must be updated regularly
***********************************************/

那么,为什么不直接修改他们提供的代码来处理您的图像或代码呢?或者更好的是,使用他们现成的一种?

【讨论】:

【参考方案3】:

jQuery 拥有browser detection。

然而,jQuery 开发者自己认为您不应该在浏览器上选择,而应该选择浏览器支持的功能。因此他们推荐browser feature detection。有道理。

【讨论】:

这个在 jQuery 1.9 中被移除了。【参考方案4】:

没有 100% 可靠的浏览器检测。访问由 navigator-object 提供的 userAgent-string 是不可靠的,但它可能被用户伪造。访问一些现在只存在于特殊浏览器中的属性,现在可能是可靠的,但在将来不可靠,因为你永远不知道,如果另一个浏览器有时会应用这个属性,或者这个属性会在未来的版本中从浏览器中删除。

【讨论】:

如果用户伪造了 userAgent,那么很明显他并没有改变浏览器的意图。所以在这种情况下不需要检测。请注意,仅在促销时才需要此检测。浏览网站实际上并不需要 Firefox。【参考方案5】:

这可能无法回答您的问题,但您可以像这样在 HTML 代码中创建条件 cmets:

http://www.quirksmode.org/css/condcom.html

您可以使用此代码检测任何 IE 版本。

除非您受雇于 Mozilla 基金会,否则我不明白为什么使用 Chrome 和 Safari 以及类似浏览器的用户应该收到此消息的通知。他们做出了积极的选择并选择了自己的浏览器,对于大多数可能不知道替代方案的 IE 用户来说,这是你不能说的。 主要是 Internet Explorer 出了问题。

很抱歉,如果这有点离题并且根本没有帮助。

/道德咆哮结束;)

【讨论】:

【参考方案6】:

我认为浏览器检测不是解决某些问题的正确方法。如果您的代码在其他浏览器上运行缓慢,您应该首先调查原因,清理并优化您的代码,如果您没有解决,您可以选择为其他浏览器提供减少的功能。

但是,请避免建议用户应该在其计算机上安装什么

【讨论】:

好的,downvote 没问题。这是我的真实想法。浏览器检测是最后的选择,至少对我来说。我不喜欢把灰尘藏在地毯下【参考方案7】:

好吧,我得到 -1 是因为我不喜欢 Firefox,还是因为我没有给你解决方案供你复制和粘贴?好了,各位:

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

在 jQuery 中

if ($.browser.msie)

【讨论】:

【参考方案8】:

我认为这不是一个好主意。 Chrome 或 Safari 等其他浏览器呢?现在,Chrome 比 Firefox 快(Sunspider 测试),所以您的说法“它在 Firefox 中加载速度更快”并不真正正确。比什么快?如果您指的是 IE,那么网络上已经有一些解决方案可以提醒用户不要使用 IE 并切换到其他东西。您不应该只偏爱一种浏览器。

【讨论】:

取决于网页,FF 加载速度更快。而且我追求的不仅是速度,FF 比 Chrome 做得更好,Safari 我不太熟悉。 您的网站并非独一无二的雪花。除非它是最先进的浏览器功能的技术演示(在这种情况下,观众足够聪明,可以识别出像“Firefox 的新 -moz-smell 属性演示”这样的标题),否则我不会仅仅因为一个(我发现一般来说,它相当慢)在渲染您的网站时应该比我首选的浏览器更快。您最好花时间尝试提高性能,也许可以通过分析您在其他浏览器中的任何 JS 来找出慢速部分并改进它们。

以上是关于使用 javascript 进行可靠的浏览器检测?的主要内容,如果未能解决你的问题,请参考以下文章

使用 php 进行可靠的用户浏览器检测

浏览器检测工具Modernizr

从用户代理或 Javascript 检测 64 位或 32 位 Windows?

Feature.js-轻量级浏览器特性检测JavaScript库插件

如何使用 javascript 检测浏览器名称和版本? [复制]

在 Javascript 中进行浏览器检测的最佳方法是啥?