Firefox 4 最终用户代理字符串

看到这样的标题,你就会知道这篇文章很有趣。(不,说真的。)

用户代理字符串是那些奇妙的、不拘一格的东西之一,它是现代性和古老性的平衡。除了大部分偏向于古老性。它多年来一点一点地发展;因为每个人都有自己解析它的特殊方式,所以它是一个臭名昭著的敏感的东西。向其中添加内容相对简单,但删除或重新排列部分内容则不然。

如果您是 Web 开发人员并且依赖于 UA 字符串中的部分内容,那么这篇文章绝对适合您。碰巧的是,Internet Explorer 9 的 UA 字符串经过了一些修改,微软最近宣布了 IE Mobile 的字符串。这使得时机成熟,可以进行修订,以便 Web 开发人员可以一次性对嗅探代码进行必要的更改。

这是 32 位 Windows 上 Firefox 4 的用户代理字符串的样子

User Agent string

请注意,此字符串将根据用户环境、平台和架构而变化。尤其重要的是要理解,根据您是在手机上、在 Windows 上、在 64 位 Windows 上、在 Mac 上还是在各种基于 Linux 的设备上,字符串可能会发生很大变化。

此外,Firefox 使用的底层浏览器平台 Gecko 被用作许多其他产品的基础。这些产品可能会生成类似 Firefox 的字符串,您应该做好处理它们的准备,并像对待 Firefox 一样对待它们。(有关更多详细信息,请参见下文。)如果您正在嗅探 UA 字符串,则应仔细考虑您想要实现的目标,以及您是否可以改为嗅探功能。请参阅 这篇优秀的文章,以获取有关如何执行此操作的一些建议。

有关完整参考,请参阅 Gecko 用户代理字符串参考。还有一个 文本文件 可以用来测试,其中包含大量新旧版本的 Firefox 和其他基于 Gecko 的浏览器的 UA 字符串。

以下是自 Firefox 3.6 以来发生变化的内容列表

1) 地区设置(例如 “en-US;”)已消失。浏览器的地区设置并不总是与用户希望查看内容的地区设置相同——HTTP Accept 标头是此信息的推荐来源。

2) “U;” 已消失。在过去,它用于区分具有强加密的浏览器和没有强加密的浏览器。如今,没有浏览器附带弱加密。这意味着,如果您正在嗅探 “U;”,则应停止这样做,或者——如果必须——嗅探缺少强加密 (“I;”“N;”)。

3) “Windows;” 前缀已从(令人惊讶的!)Windows 特定字符串中删除。请注意,平台令牌中分号分隔的字段数量在不同的平台之间有所不同!

4) 在诺基亚移动 Maemo(和 Meego)平台上运行的浏览器现在将自身报告为 “(Maemo; Linux armv7l; …)”。这与 Android 移动字符串 “(Android; Linux armv7l; …)” 保持一致,并且随着更多 Linux 平台的使用,我们将继续在此处添加不同的字符串。

5) 一个相当小的细节,但值得注意——对于在 x86_64 平台上运行的 Linux i686 版本,平台特定部分现在将显示为 “(X11; Linux i686 on x86_64; rv:…)”。它已从 “(X11; Linux i686 (x86_64); rv:…)” 更改。(嵌套括号不是一个好主意!)

6) “Gecko/yyyymmdd” 令牌中的 Gecko 构建日期已针对 Firefox 版本固定为 20100101。这意味着

  • 如果您想检测浏览器是否是真正的 Gecko,请搜索字符串 “Gecko”“rv:”。这两个字符串的存在将区分 Gecko 与在 UA 字符串中声明为 “like Gecko” 的浏览器。
  • 如果您想确定 Gecko 版本,首先——如上所述——仔细考虑您是否可以改为嗅探功能。如果必须,请从 “rv:x.y.z” 字符串中获取它。

如果您目前正在使用构建日期或以其他方式依赖于 “Gecko/yyyymmdd” 令牌的确切格式,请停止!在 Gecko 的下一个主要版本中,这将被字符串 “Gecko/” 替换。如果您依赖于它后面会跟着日期字符串这一事实,那么您将导致故障。

出于测试目的,未固定的构建日期仍包含在 Firefox 的夜间版本中,但将在未来的夜间版本中删除。

7) 对于除 Firefox 之外的基于 Gecko 的浏览器,它们识别自己的方式发生了变化。例如,这就是 Firefox 的移动版本 Fennec 的样子

Fennec User Agent string

  • Firefox 令牌。这是一个兼容性令牌,某些基于 Gecko 的浏览器将使用它;例如,Fennec 和 Camino(适用于 Mac)希望看起来像 Firefox,以最大限度地与网站兼容。(字符串的版本部分通常代表与给定 Gecko 版本相对应的 Firefox 版本。)现在,这是一个可选令牌,一些基于 Gecko 的浏览器可能不会选择使用它。因此,嗅探器应该查找 Gecko——而不是 Firefox!对于 Firefox 本身和其他未选择加入的浏览器,此令牌将不会出现,因为它由
  • 应用程序处理。对于 Firefox 本身,这将类似于 “Firefox/4.0.1”,或者 “Fennec/2.0.1”,或者 “Camino/2.1.1”。此外,Firefox 的测试版本(Minefield 夜间版本和预发布版本)现在将识别为 Firefox 而不是 Minefield。

还值得注意的是,我们为什么没有更改某些内容。Linux 字符串中的 “X11” 部分可能看起来是多余的,但实际上并非如此:台式机几乎完全运行 X11,但 Android 手机则不然,而 Maemo(虽然基于 X11)应该区分开来。出于这样的原因,字符串的各个平台特定部分非常重要:Windows 64 上的 x64 或 WoW64(64 位 Windows 上的 32 位浏览器)有不同的令牌;Mac OS X 上的 PPC 或 Intel;以及 Linux 的各种环境和架构。以下是一些不同平台上各种基于 Gecko 的浏览器的示例

Mozilla/5.0 (Windows NT 5.2; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Mozilla/5.0 (WindowsCE 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Mozilla/5.0 (Windows NT 6.0; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre

Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre

Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Mozilla/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Mozilla/5.0 (X11; Linux i686 on x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Mozilla/5.0 (X11; Linux i686; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre

Mozilla/5.0 (Android; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1
Mozilla/5.0 (Android; Linux armv7l; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre Fennec/2.0b1pre
Mozilla/5.0 (Maemo; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1
Mozilla/5.0 (X11; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1
Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1
Mozilla/5.0 (X11; Linux i686 on x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1
Mozilla/5.0 (X11; Linux i686; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre Fennec/2.0b1pre

Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Camino/2.2.1
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre Camino/2.2a1pre

还有一些其他重要的更改与 UA 字符串如何被外部程序、Firefox 插件和用户自己修改有关。这些更改将在另一篇文章中详细介绍,但结果是您在这里看到的字符串就是您在现实世界中看到的字符串。

现在,如果您是 Web 开发人员,请注意!所有这些更改都将在 Firefox 4 Beta 6(即将发布)中出现,因此,如果您想领先一步,欢迎您对其进行测试。如上所述,有关所有这些辉煌变化的 UA 字符串的完整列表,请参阅 上面的链接文本文件。嗅探愉快!


47 条评论

  1. fearphage

    这篇文章的整体基调是错误的。听起来它是在支持甚至建议浏览器嗅探,而这正是整个浏览器社区一直试图抛在脑后的东西。

    https://mdn.org.cn/en/Browser_Detection_and_Cross_Browser_Support#Recommendations

    2010年9月9日 12:08

  2. Nicholas C. Zakas

    @fearphage – 我们永远无法摆脱用户代理嗅探。出于多种原因,我们仍然需要在服务器上使用它,其中最不重要的是分析。我可以保证,每个分析工具开发人员都会发现这篇文章在确保其数据正确性方面非常有用。

    如果您阅读了这篇文章并认为它是在建议在功能检测之上使用用户代理嗅探,那么恐怕您完全误读了它。

    2010年9月9日 12:15

  3. ddahl

    @fearphage 仅仅因为确定功能的新技术更优越,并且确实鼓励使用,并不意味着开发人员将不再进行浏览器嗅探。

    开发人员将在未来数年进行嗅探,并且网站将会出现故障。这篇文章只是对问题进行了现实的描述。

    2010年9月9日 13:47

  4. Robert Kaiser

    请注意,Firefox 兼容性令牌也将默认在 SeaMonkey 2.1 中启用(尽管在高级首选项中将有一个复选框可将其关闭)。

    因此,默认的 SeaMonkey 用户代理字符串将例如为

    Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 SeaMonkey/2.1.1

    当用户选择取消选中该复选框时,Firefox 令牌将消失,但默认情况下,它将存在。

    2010年9月9日 13:47

  5. Robin

    WTF,地区设置消失了?!它在整个网络中都被使用!据我所知,大多数其他浏览器都在其用户代理中包含它。

    2010年9月9日 14:34

    1. Boris

      实际上,地区设置的使用并不多。IE 也没有将其包含在其 UA 中。因此,事实上,“大多数”(按用户数量计算)浏览器都没有包含它,而且现在我们不包含它之后,情况更是如此。

      2010年9月11日 07:31

  6. Don Marti

    为什么为了支持像浏览器嗅探这样已弃用的活动而泄露如此详细的隐私信息,而人们总是错误地使用它。如何只使用

    User-agent: mozilla.org

    2010年9月9日 14:53

  7. Tony Mechelynck

    «6) “Gecko/yyyymmdd” 令牌中的 Gecko 构建日期已针对 Firefox 版本固定为 20100101。构建日期将在下一个主要版本中完全删除,使令牌仅为“Gecko”,不带“/”或日期。»

    是的,感谢那些分类器和修复程序,从下一个主要版本开始,他们将无法从 UA 字符串(Bugzilla 在通过“引导”表单提交的错误的注释 #0 中显示的内容)中猜测错误出现在哪个更改集中(或连续更改集组)。在我看来,这种“指纹偏执狂”在每一次转向中都显得有些愚蠢。我们将不得不获得崩溃并依赖于 Breakpad 偷偷发送给 Soccorro 的“内部信息”,否则我们将一筹莫展。

    2010年9月9日 17:25

    1. Boris

      对于您可以重现的错误,您可以自己进行二分查找,对吧?对于其他错误,您可以要求错误报告者从 about:buildconfig 中复制/粘贴更改集 ID,这比日期更有用……。

      2010年9月9日 18:09

      1. Tony Mechelynck

        是的,当然,我怎么知道http://hg.mozilla.org/mozilla-central/rev/ab4c25f8c9dd是在http://hg.mozilla.org/mozilla-central/rev/6fe4cb9f2a55之前还是之后?(别看:我编造的。)有了最后一个“正常”和第一个“异常”每日构建的构建日期(无论我是否可以重现错误或必须询问报告者),我就可以立即将回归窗口缩小到最多48小时的精度;如果“构建 ID”采用 yyyyMMddhhmmss 的格式(可惜,about:buildconfig 中没有),则窗口的精度会更高。

        另外,如果错误恰好发生在 comm-central(SeaMonkey、Thunderbird、Lightning)甚至一些“较小”的存储库(ChatZilla hg、DOM Inspector hg、Venkman hg 或 LDAP CVS;SeaMonkey 从 comm-central 和 mozilla-central 获取源代码,总共有六个不同的位置)中,这些 mozilla-central Mercurial 哈希值就没有多大帮助了。

        至于在事先不知道时间范围的情况下进行“二分查找”,我过去也做过(ftp、卸载旧版本、安装新下载的版本、测试),这真是太麻烦了:如果错误描述中已经显示了一个“异常”时间戳(如果这是一个回归,则可能接近“错误事件”),那就好了。“hg bisect”不适用,因为有上面提到的六个不同的存储库,即使我可以获取给定日期的所有源代码,也意味着我需要在我的机器上编译,这比 Mozilla 构建器慢得多(编译 SeaMonkey 通常需要 13 到 14 个小时)。

        2010年9月9日 20:58

        1. Henry

          嗯,你知道

          navigator.buildID

          是为了识别构建日期而存在的吗?

          从 userAgent 中删除它是很聪明的。它可以防止指纹识别。

          Bugzilla 可以使用 javascript 获取 buildDate。

          2010年9月12日 01:36

  8. David

    为什么我们不能丢弃 User agent 字符串?或者也许可以使其真正可解析?

    Mozilla/5.0,我们为什么还要保留它?
    为什么 Gecko 版本包含在平台详细信息中,而不是 Gecko 令牌中?
    为什么不直接使用
    (平台) (引擎) (应用程序)
    (X11; Linux i686;) (Gecko/2.0.1) (Firefox/4.0.1)

    通常,如今所有 UA 字符串都用于浏览器统计,以及可能检测移动/触屏浏览器,以便提供更合适的内容。讽刺的是,硬件信息不包含在 UA 字符串中,这使得在不假设特定浏览器将在哪个设备上运行的情况下,无法检测此类浏览器。

    2010年9月9日 19:00

    1. Tony Mechelynck

      你的意思是,“硬件信息不包含在 UA 字符串中”?上面示例中的“Linux i686”表示你正在 32 位 Intel-686 或兼容处理器上运行应用程序的 32 位版本(以及 Linux 操作系统,但这是软件)。Fennec 甚至(如果可能)在 Maemo 上运行的 Firefox 将显示“Maemo; Linux armv7l;”,而不是上面显示的“X11; Linux i686;”;据我理解,armv7l 表示处理器系列。

      2010年9月9日 21:18

      1. David

        是的,如果你幸运的话,可以了解一些有关 CPU 的信息,但它几乎没有告诉你任何有关设备本身的信息(屏幕尺寸、触控功能等)。

        2010年9月9日 22:27

        1. Tony Mechelynck

          关于屏幕尺寸,与浏览器相关的是浏览器窗口的尺寸,这可以通过一次鼠标拖动来更改;关于触控功能,我认为触摸屏、光笔、触控板或鼠标对软件来说“感觉”都一样:它们都是“指向设备”,我预计浏览器应该从操作系统获得相同的“事件”,无论你用手指尖或光笔点击屏幕,还是点击触控板或单击鼠标,因此,这些都不应该是“重要”的特性。平台的第一部分在 Maemo 或 Android 上与 Macintosh、X11 或 Windows 不同,因此你仍然应该能够分辨出你是在智能手机上运行还是在台式机或笔记本电脑上运行,其屏幕尺寸是全尺寸的。

          2010年9月10日 04:34

          1. Henry

            我认为 Firefox 无法删除“Mozilla/5.0”,因为许多服务器使用它来区分浏览器和机器人。

            (据我所知,Opera 过去识别为 Opera/,但在被阻止太多后,它们也更改为 Mozilla/5.0)

            2010年9月12日 01:32

          2. Hans Walter

            @Henry:不,它再次是 Opera/…。但 Opera 也有这个漂亮的 browser.js

            2010年9月13日 06:44

  9. Thomas

    Android 版本信息在哪里?

    我认为这非常重要!
    你提供了 Windows 和 Mac 的版本信息,但没有提供 Android 的版本信息?我认为你应该提供。默认的 Android 浏览器就是这样做的!

    2010年9月10日 00:05

  10. Thomas

    请添加其他平台的版本信息。

    这是一个 Android 用户代理字符串的示例
    Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17

    此外,例如 Ubuntu 发送的信息将去哪里

    Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.2.8) Gecko/20100722 Ubuntu/10.04 (lucid) Firefox/3.6.8

    2010年9月10日 00:08

  11. Ben Bucksch

    在查找 Gecko 时,请查找“Gecko/”,而不是“Gecko”+“rv:”或“Firefox”。

    查找“Firefox”是错误的,因为它只是浏览器 UI,对网站没有任何影响。还有许多其他基于 Gecko 的浏览器,它们都将被迫显示“Firefox”,这太疯狂了。

    与 Dan 的说法不同,UA 字符串不应更改为“Gecko”,而应更改为“Gecko/2.1”,a) 因为这是标准建议的,b) 因为 Safari 也发送“Gecko”,因此保持“Gecko/”很重要。

    2010年9月10日 06:30

  12. discoleo

    > 我预计浏览器应该从操作系统获得相同的“事件”,无论你用手指尖或光笔点击屏幕,还是点击触控板或单击鼠标

    但这太面向编程了,而且基本上是错误的。如果我用手指点击触控板,我肯定会在精细控制方面遇到一些困难,例如在单词中选择字母“i”。从可用性的角度来看,如果我必须使用这些不同的技术模式进行导航和记录数据,我希望网页能够适应并切换,例如,如果我仅使用触控板,则切换到表单内的等宽字体。

    2010年9月10日 08:12

    1. Tony Mechelynck

      我希望网页能够适应并切换,例如,如果我仅使用触控板,则切换到表单内的等宽字体。

      很简单:在该机器上,找到浏览器配置文件的 chrome/ 子目录,并在该文件夹中创建或修改 userChrome.css 文件,使其包含(例如)以下 CSS 规则

      input, textarea { font-family: monospace !important; font-size: 125% !important }

      为所有单行和多行输入字段提供比周围文本(或比“包含”HTML 元素中的字体大小)大 25% 的等宽字体。

      2010年9月10日 08:43

      1. Tony Mechelynck

        糟糕:userContent.css

        2010年9月10日 08:44

        1. David

          >很简单:在该机器上,找到浏览器配置文件的 chrome/ 子目录,并创建或修改…。

          简单?对你我来说,是的,对普通用户来说,不是。内容提供商也对此无能为力。期望某人在他们使用的每台机器上都浏览每个浏览器配置文件来修复问题,坦率地说,这很荒谬。

          > 我认为触摸屏、光笔、触控板或鼠标对软件来说“感觉”都一样

          它们对软件来说“感觉”并不一样。触摸事件有单独的事件处理程序。有些事情你无法用触摸来完成(双击、鼠标中键单击),而用鼠标可以完成,有些事情你可以用触摸来完成(多点触控手势),而用鼠标无法完成。

          根据操作系统假设硬件与根据浏览器引擎假设浏览器的功能具有完全相同的问题。

          2010年9月10日 17:10

  13. Boris

    Tony,基于日期的窗口由于时钟偏差而从未很好用。

    使用这两个变更集 ID,你可以直接向 pushlog 查询这两个变更集之间的所有推送,并获得精确的变更集窗口。

    2010年9月11日 07:29

  14. Don Marti

    EFF 文章,介绍了 User-Agent 中这种微观细节如何促进用户跟踪。

    http://www.eff.org/deeplinks/2010/01/tracking-by-user-agent

    2010年9月11日 07:41

  15. Stephen Z

    本质上,问题不在于用户代理字符串本身,而在于谁接收它——但只要第三方站点(例如:广告)可以获取它,我认为最好将其缩减到几乎为零,并让 javascript(至少可以通过 NoScript 选择性地启用/禁用)承担“你使用什么操作系统/平台/渲染引擎”的重担。

    我想我很高兴它在 4.0 中更短,但隐私影响使我想要尽可能地接近“消失”。我认为“Mozilla/5.0 Firefox 4.0”就足够了。

    2010年9月11日 13:11

    1. Tony Mechelynck

      好吧,将 general.useragent.override 设置为空字符串(手动或通过 UserAgent Switcher 扩展),或者,如果这不起作用,则将其设置为单个空格字符,你的 UA 字符串消失。但考虑到上面的一些回复,我想你至少希望保留“Mozilla/5.0”,以避免被误认为机器人并被许多站点阻止。

      2010年9月13日 03:44

      1. Stephen Z

        Tony,
        感谢你的建议,但问题是,如果用户(例如:我)确实将他们的用户代理字符串更改为非标准字符串,这只会使我的浏览器更容易识别和跟踪。反之则不然。

        这是一个简单的匿名问题:与我具有相同用户代理的人越多越好。我的回应是,默认的用户字符串应该尽可能地不具体。mozilla 标记声明它是一个浏览器(为了兼容性)。Firefox 带有一个次要版本(例如 3.6),以便对站点兼容性进行一些猜测。也许还有一个额外的字符串(“mobile”或“touch”)来指定目标 UI 外形尺寸。但除此之外没有其他内容,让 Javascript 处理其余部分。

        我能想到的唯一替代方案是根本不向第三方站点和脚本发送用户代理。

        2010年9月13日 13:55

        1. RCL

          发送更多信息有什么问题?很高兴从日志中看到谁访问了你的站点,他们运行哪个平台等。

          2010年9月24日 11:34

          1. RSE

            “发送更多信息有什么问题?”
            隐私应该是默认的。任何希望发送更多信息的人都可以选择这样做。

            2011年12月7日 02:39

  16. Thomas

    我提交了一个关于缺少 Android 版本信息的错误
    https://bugzilla.mozilla.org/show_bug.cgi?id=595669

    2010年9月12日 09:45

  17. Hans Walter

    > 在下一个主要版本的 Gecko 中,这将被包含 Gecko 版本的字符串替换:“Gecko/x.y.z”。如果你依赖于“Gecko/”后面将跟日期字符串的事实,那么你将出现问题。

    > 如果必须,请从“rv:x.y.z”字符串中获取它。

    我有点困惑。这是否意味着将来将有两个“Gecko/…“字符串,一个带“rv”,一个不带?!

    2010年9月13日 06:49

  18. John

    我强烈建议将 Windows; 放回你的 Windows UA 中。删除它会使 Windows Firefox UA 与其他操作系统的 Firefox UA 不一致。一致性在编程时非常有用。

    2010年9月14日 11:26

  19. gialloporpora

    我有一个问题,在以前的 Firefox 版本中,我更改了此首选项
    general.useragent.vendor

    以指定确切的 Linux 版本,例如 Ubuntu/10.4 等,现在,在 Firefox 4 中,此首选项不再起作用,
    它已过期了吗?是否存在修改用户代理字符串以插入操作系统版本的方法?

    2011年3月17日 11:25

    1. Tony Mechelynck

      在 Firefox 4(以及 Thunderbird 3.3、SeaMonkey 2.1 等)中,所有 general.useragent.* 首选项都已失效,只有一个例外:你仍然可以使用 general.useragent.override 替换整个用户代理字符串(但不建议这样做)。

      这意味着在 Linux 下,你通常只能获得“X11; Linux i686;”或“X11; Linux x86_64;”。不会有更多详细信息,除非我们中的一个人运行 32 位版本,而另一个人运行 64 位版本,否则你的 Ubuntu 和我的 openSUSE 将获得完全相同的字符串(来自相同的浏览器版本)。

      2011年3月18日 09:30

      1. Peter D

        在 FF 3.6.x 之前的版本中,我们在 prefs.js 中使用了此条目
        user_pref(“general.useragent.extra.myblabla”, “BlaBla”);


        它会在用户代理字符串后面添加额外的字符串。我们从 Firefox 1.5 版本就开始使用这个条目,但 Firefox 4.0 忽略了这个条目。

        我不想覆盖整个字符串。有什么技巧可以恢复旧的功能吗?

        2011年3月21日 23:59

        1. Hemilton

          没有,并且强烈建议不要以任何方式更改用户代理字符串。请不要这样做。

          2011年3月22日 09:24

        2. Tony Mechelynck

          没有。除非你想要继续使用 Firefox 3.6.x 或更早版本、SeaMonkey 2.0.x 或更早版本等。详情请参见 https://bugzilla.mozilla.org/show_bug.cgi?id=581008

          2011年3月22日 16:31

  20. Alenônimo

    我认为浏览器应该去掉“Mozilla/5.0”部分,并使用它们真正的名称或引擎来代替。

    2011年3月31日 16:15

    1. Rihards

      同意。

      2011年3月31日 19:16

  21. Travis

    那些认为浏览器嗅探有害的人显然从未构建过需要在 IE6-9、Firefox、Safari、Chrome 和 Opera 中正确渲染的网站。更不用说那些需要在之前版本以及智能手机上正确渲染的网站了。

    例如,IE6 不支持透明 PNG。所有设计师都知道这一点,那么检查 IE6 然后对图像进行不同的处理有什么问题呢?

    2011年4月1日 10:47

  22. gialloporpora

    今天,我尝试了 Firefox 5b1,并且注意到字符串仍然被更改了,我的字符串是

    Mozilla/5.0 (Windows NT 5.1; rv:5.0b1) Gecko/20100101 Firefox/5.0

    现在,“真实”版本 (5.0b1) 位于 Gecko 版本的位置。此更改是否有效?

    我之所以这样问,是因为在 Mozilla 的意大利语论坛中,我们使用一个插件来显示用户代理的漂亮版本(有时在用户提供很少系统信息的情况下可能很有用),现在,Firefox 5.0b1 显示为 Firefox 5.0,我想知道此更改是否有效,因为我更改了插件代码以检测新 Firefox 中的精确版本。
    谢谢

    2011年5月5日 09:55

    1. Tony Mechelynck

      Firefox 和 Gecko 的版本控制系统最近发生了变化。你那里的是“Firefox 5.0”,当前的 Aurora 构建版本,日期未知(注意 20100101,不可能是真实的),并且基于 Gecko 5.0b1 构建。我的 SeaMonkey 构建版本的用户代理设置为

      Mozilla/5.0 (X11; Linux x86_64; rv:6.0a1) Gecko/20110417 Firefox/6.0a1 SeaMonkey/2.2a1pre

      这意味着 SeaMonkey 2.2a1pre 与 Firefox-Nightly 6.0a1 平行,并于 2011 年 4 月 17 日基于 Gecko 6.0a1 构建。在某个地方(我不确定具体位置,但 Nightly Tester Tools 扩展程序可以找到它)它知道其代码库是在 2011-04-17 00:30:06 山景时间提取的。

      2011年5月6日 07:57

  23. Cristian

    检测所有可能的浏览器,例如:代理、桌面、平板电脑、移动设备和应用程序(Java、Symbian、Android)。这是有史以来最好的代码,尽情享受吧 ;) http://code.google.com/p/detect-real-user-agent/

    2012年7月6日 23:07

  24. Astrid

    如果您引用我的几篇文章,只要您提供来源和链接回
    您的网站,您介意吗?我的网站与您的网站处于同一个领域,我的用户会真正受益于
    您在此处提供的大量信息。请告诉我
    这是否可以。谢谢!

    2012年9月13日 06:19

  25. Chloe Vevrier

    您好!本文中的建议非常有帮助!

    正是这些细微的变化产生了最大的改变。
    非常感谢分享!

    2012年12月18日 14:42

本文评论已关闭。