此文档描述了Firefox 4及以后版本的Firefox浏览器,以及基于Gecko 2.0及以后版本的应用所使用的用户代理字符串(user agent)。对于Gecko 2.0之后产生的变化,可以参考Firefox 4中最终的用户代理字符串(博客文章)。也可以参考检测用户代理,以及这篇Mozilla Hacks博文

总体形式

  Firefox的用户代理字符串(UA string)可以被拆分为以下四个部分:

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")。在近期几个版本的浏览器中,geckoversionfirefoxversion一致。
  • Gecko/geckotrail 标明浏览器基于Gecko。在桌面端, geckotrail是固定字符串"20100101"。
  • Firefox/firefoxversion 标明浏览器是Firefox,并提供了版本号(如"17.0")。
  • 自从移动版Firefox 10开始,geckotrailfirefoxversion保持一致。
(如果你必须检测浏览器引擎,而不是去做特征检测的话)推荐的检测浏览器基于Gecko的方法,是使用"Gecko"与"rv:"字符串。这是因为有一些浏览器的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"。这个字段是否展示,由"general.useragent.compatMode.firefox"中设定的布尔值控制。

标明移动设备与平板设备

Requires Gecko 11.0(Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8)

  用户代理字符串(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

  Windows中的用户代理字符串会发生以下变化,其中x.y代表Windows NT 版本,(如:Windows NT 6.1)。

Windows 版本 Gecko 用户代理字符串
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 用户代理字符串
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 用户代理字符串
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 用户代理字符串
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版本开始,Android版的Firefox会在platform字段中包含Android版本号。为增加共通性,如果浏览器在Android 4以下版本运行,此字段会使用4.4,Android 4.4及以上版本会使用当前版本号。请注意,发布到不同Android版本的Gecko,是拥有相同兼容性的同个Gecko。

设备尺寸 Gecko 用户代理字符串
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 用户代理字符串
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 strings)

  尽管Mozilla强烈反对,然而一些手机制造商仍然在其设备的UA字符串中,包含了标明设备id的字段。在这种情况下,Firefox OS的UA字符串会与上表中所示的具有设备特征(Device-specific)的字符串保持一致,其中nnnn;代表设备制造商的设备代码(参见引导)。其中一些是以下几个形式: "NexusOne;","ZTEOpen;","Open C;"(另请注意,也不鼓励在其中加入空格)。我们提供这些信息以辅助您指定UA判断逻辑,但Mozilla不鼓励从UA字符串中检测设备id。

  这里有一个可以检测所有移动设备的JavaScript正则表达式,包含那些UA字符串中包含设备id的设备:

/mobi/i

其中 i 为大小写敏感的标记,而 mobi 则将匹配所有的移动设备。

Firefox OS 版本号

  由于Firefox OS未被包含于UA字符串中,我们可以通过UA字符串中的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

  iOS用户的Firefox使用的是Safari移动版默认的UA字符串,再增加了FxiOS/<version>字段,与iOS中的Chrome标记自己的方式一致。

设备尺寸 Firefox  iOS 用户代理字符串
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一致的用户代理字符串。

其他基于Gecko的浏览器

  以下是不同平台下,一些基于Gecko的浏览器的UA字符串样例。请注意,其中很多并未基于Gecko 2.0发布。

浏览器 Gecko 用户代理字符串
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 添加用户代理字符串,(参考废弃的用户代理字符串参考)。不过由于bug 581008的存在,这种操作已被禁止。

  在过去,特定的插件、扩展程序会在用户代理字符串中添加字段,以表明他们被安装的来源网站。如果非要如此(请注意这会减慢每个请求),推荐的做法是使用自定义HTTP头部

参见


Comments to mozilla.dev.platform

文档标签和贡献者

此页面的贡献者: konrumi
最后编辑者: konrumi,