Firefox 用户代理字符串 (user agent string) 参考
此文档描述了 Firefox 4 及之后版本的 Firefox 浏览器,以及基于 Gecko 2.0 及以后版本的应用所使用的 User Agent(user agent)。对于 Gecko 2.0 之后产生的变化,可参考 Firefox 4 中最终的 User Agent 值(博客文章)。也可以参考 检测 User Agent,以及这篇 Mozilla Hacks 博文:User Agent 检测的历史与操作清单。
总体形式
Firefox 的 User Agent(用户代理)值可被拆分为以下四个部分:
Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion
- Mozilla/5.0 表明该浏览器与 Mozilla 相兼容的通用字符串。此字段几乎存在于现今所有浏览器的用户代理之中。
- platform 描述了浏览器所运行的本地操作系统平台(例如:Windows,Mac,Linux 或 Android),以及其是否为移动设备。Firefox OS 设备只会简单地表示为"Mobile";因为它实际上基于 Web。请注意,platform 的值可包含多个被 ";" 分隔的字段。更多细节与例子可以参考下面内容。
- rv:geckoversion 显示了 Gecko 的版本号,(如*"17.0"*)。在最近几个版本的浏览器中,geckoversion 与 firefoxversion 一致。
- Gecko/geckotrail 标明浏览器基于 Gecko。
- 在桌面端,geckotrail 的值恒为"20100101"。
- Firefox/firefoxversion 标明浏览器是 Firefox,并提供了版本号(如"17.0")。
- 自从移动版 Firefox 10 开始,geckotrail与firefoxversion保持一致。
备注: (如果你必须检测浏览器引擎,而不是去做特征检测的话)推荐使用"Gecko"与"rv:"字符串来检测基于 Gecko 的浏览器。因为一些浏览器的 UA 中也包含有"like Gecko"字段。
对于其他基于 Gecko 的产品,UA 字符串会符合以下两个规则中的一个,除了下面的描述外,其他字段与上面描述的意义相同。
Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail appname/appversion Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion appname/appversion
- appname/appversion 标明了应用名与版本,举个例子,这个字段可以是"Camino/2.1.1"或"SeaMonkey/2.7.1"。
- Firefox/firefoxversion 是一个可选的兼容字段,一些基于 Gecko 的浏览器选择加入,以使那些支持 Firefox 的网页进行最大的兼容。firefoxversion 应与其提供的 Gecko 版本对应的 Firefox 版本相同。一些基于 Gecko 的浏览器可能未加入此此段,因此,在检测的时候,应当使用"Gecko"而非"Firefox"。是否展示这个字段由 about:config 中*"general.useragent.compatMode.firefox"*项设定的布尔值控制。
User Agent(UA String)的platform部分,标明了 Firefox 是否运行在手机或平板尺寸的设备上。当 Firefox 运行在移动设备上时,UA 中的这个字段将包含Mobile;。当 Firefox 运行于平板设备时,UA 中的这个字段将包含Tablet;。例如:
Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0 Mozilla/5.0 (Android 4.4; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0
备注: 上述版本号并不对应当前版本,请避免基于此例子中的版本号。
推荐的判断设备尺寸的方法是使用 CSS 媒体查询 (CSS Media Query)。但是,当你需要使用 UA 判断用户是否使用移动尺寸的设备,请查找"Mobi"(以兼容使用"Mobi"的 Opera 移动浏览器)。不要 假定"Android"字符串与设备尺寸存在关联。这样的话,在“Firefox 在其他操作系统的移动尺寸设备上运行”或“使用 Android 的笔记本电脑”的情形下,你的代码才能正确运行。此外,请使用触摸检测以分辨设备是否支持触摸,不要使用"Mobi"或"Tablet",因为也有很多触摸设备并非移动设备或平板。
备注: Firefox OS 设备的 UA 中不会有标明操作系统的字段,比如"Mozilla/5.0 (Mobile; rv:15.0) Gecko/15.0 Firefox/15.0"。因为其平台实为 Web。
Windows
除却安腾平台与 16 位平台,Windows 中的 User Agent 值有如下几类,其中 x.y 代表 Windows NT 版本,(例如:Windows NT 6.1)。
Windows 版本 | Gecko User Agent |
---|---|
Windows NT on x86 | Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101 Firefox/10.0 |
Windows NT, Win64 on x64 | Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0 |
Windows NT, WOW64 | Mozilla/5.0 (Windows NT x.y; WOW64; rv:10.0) Gecko/20100101 Firefox/10.0 |
Macintosh
下表中 x.y 为 Mac OS X 的版本(例如:Mac OS X 10.6)。
Mac OS X 版本 | Gecko User Agent |
---|---|
Mac OS X on Intel x86 or x86_64 | Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0 |
Mac OS X on PowerPC | Mozilla/5.0 (Macintosh; PPC Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0 |
Linux
Linux 是一个高度分化的平台,下面给出了几个常见的例子。
Linux 版本 | Gecko User Agent 值 |
---|---|
Linux desktop, i686 | Mozilla/5.0 (X11; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 |
Linux desktop, x86_64 | Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 |
Linux desktop, i686 running on x86_64 | Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 |
Nokia N900 Linux mobile, on the Fennec browser | Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0) Gecko/20100101 Firefox/10.0 Fennec/10.0 |
Android (40 版本及以下)
设备类型 | Gecko User Agent 值 |
---|---|
Phone | Mozilla/5.0 (Android; Mobile; rv:40.0) Gecko/40.0 Firefox/40.0 |
Tablet | Mozilla/5.0 (Android; Tablet; rv:40.0) Gecko/40.0 Firefox/40.0 |
Android (41 版本及以上)
从 41 版本开始,Firefox Android 会在 platform 字段中包含 Android 版本号。为增加兼容性,如果浏览器在 Android 4 及以下版本的 Android 设备上运行,此字段会使用 4.4,Android 4.4 及以上版本的则会使用当前版本号。请注意,目前发布至不同版本的 Android 设备的 Gecko,是拥有相同兼容性的同一个 Gecko 的不同架构(ARMv7、x86、x86_64)编译版。
设备类型 | Gecko User Agent 值 |
---|---|
Phone | Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0 |
Tablet | Mozilla/5.0 (Android 4.4; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0 |
Firefox OS
设备类型 | Gecko User Agent 值 |
---|---|
Phone | Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0 |
Tablet | Mozilla/5.0 (Tablet; rv:26.0) Gecko/26.0 Firefox/26.0 |
TV | Mozilla/5.0 (TV; rv:44.0) Gecko/44.0 Firefox/44.0 |
Device-specific | Mozilla/5.0 (Mobile; nnnn; rv:26.0) Gecko/26.0 Firefox/26.0 |
具有设备特征的 User Agent 值
尽管 Mozilla 强烈反对,然而一些手机制造商仍然会在其设备的 User Agent 值中包含标明设备 ID 的字段。在这种情况下,Firefox OS 的 User Agent 会与上表中所示的具有设备特征 (Device-specific) 的字符串保持一致,其中nnnn;代表设备制造商的设备代码(参见引导)。其中一些是以下几个形式: "NexusOne;","ZTEOpen;","Open C;"(另请注意,同样不鼓励在其中加入空格)。我们提供这些信息以辅助你设定 User Agent 判断逻辑,但 Mozilla 不鼓励从 User Agent 值中检测设备 ID。
这里有一个可以检测所有移动设备的 JavaScript 正则表达式,包含那些 UA 字符串中包含设备 id 的设备:
/mobi/i
其中 i
为大小写敏感的标记,而 mobi
则将匹配所有的移动设备。
Firefox OS 版本号
由于 Firefox OS 的版本号未被包含于 User Agent 值中,我们可以通过 User Agent 中的 Gecko 版本号来推断其版本信息。
Firefox OS 版本号 | Gecko 版本号 |
---|---|
1.0.1 | 18.0 |
1.1 | 18.1 |
1.2 | 26.0 |
1.3 | 28.0 |
1.4 | 30.0 |
2.0 | 32.0 |
2.1 | 34.0 |
2.2 | 37 |
2.5 | 44 |
备注: 通过查看 Mercurial 版本库名称,可以较容易地找出对应关系。其中以 mozilla-b2g
开头的发布便属于 Firefox OS,在其名字中包含了 Firefox OS 与 Gecko 的版本号。
Firefox OS 的版本号由 4 位数字组成:X.X.X.Y
。前两位数字由 Mozilla 产品团度决定,表明是包含新特性的版本(如:v1.1, 1.2 等)。第三位数字随安全更新而自增(约 6 周左右),第四位数字由 OEM 维护。
iOS 上的 Firefox
Firefox iOS 版使用 Safari 移动版的默认 User Agent 再加上 FxiOS/<version> 字段,与 iOS 上的 Chrome 标记自己的方式 一致。
设备型号 | Firefox iOS User Agent 值 |
---|---|
iPod | Mozilla/5.0 (iPod touch; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4 |
iPhone | Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4 |
iPad | Mozilla/5.0 (iPad; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4 |
Firefox Web 运行库(Web Runtime)
在 Firefox Web 运行库(Web Runtime)中,使用与桌面版 Firefox 一致的 User Agent 值。
其他基于 Gecko 的浏览器
以下是不同平台下,一些基于 Gecko 的浏览器的 User Agent 值样例。请注意,其中很多并未基于 Gecko 2.0 发布。
浏览器 | Gecko User Agent 值 |
---|---|
Firefox for Maemo (Nokia N900) | Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 Fennec/10.0.1 |
Camino on Mac | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Camino/2.2.1 |
SeaMonkey on Windows | Mozilla/5.0 (Windows NT 5.2; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1 |
SeaMonkey on Mac | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1 |
SeaMonkey on Linux | Mozilla/5.0 (X11; Linux i686; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1 |
对于应用、供应商、扩展程序的注意事项
在 Firefox 4 和 Gecko 2.0 之前,扩展程序可以通过 general.useragent.extra.identifier
附加 User Agent 值,(参考 废弃的 User Agent 值参考)。不过 Firefox bug 581008 出现后,这种操作已被禁止。
在过去,特定的插件、扩展程序会在 User Agent 中添加字段,以表明他们被安装的来源网站。如果非要如此(请注意,这会减慢每个请求的发送速度),推荐的做法是 设定自定义 HTTP 请求头。