Firefox 用户代理字符串参考

本文档描述了 Firefox 4 及更高版本以及基于 Gecko 2.0 及更高版本的应用程序中使用的用户代理字符串。有关 Gecko 2.0 中字符串变化的详细信息,请参阅Firefox 4 的最终用户代理字符串(博客文章)。另请参阅有关用户代理嗅探的文档以及这篇Hacks 博客文章

通用格式

Firefox 自身的用户代理字符串分为四个部分

Mozilla/5.0 (platform; rv:gecko-version) Gecko/gecko-trail Firefox/firefox-version

  • Mozilla/5.0 是一个通用令牌,表示浏览器与 Mozilla 兼容,并且在当今几乎所有浏览器中都很常见。

  • platform 描述了浏览器运行的本机平台(例如,Windows、Mac、Linux 或 Android),以及它是否是手机。Firefox OS 手机显示 Mobile;Web 是平台。请注意,platform 可以由多个以 ; 分隔的令牌组成。有关更多详细信息和示例,请参见下文。

  • rv:gecko-version 表示 Gecko 的发布版本(例如 17.0)。

  • Gecko/gecko-trail 表示浏览器基于 Gecko。

  • 在桌面设备上,gecko-trail 是固定字符串 20100101

  • Firefox/firefox-version 表示浏览器是 Firefox,并提供版本(例如 17.0)。

  • 从移动设备上的 Firefox 10 开始,gecko-trailfirefox-version 相同。

注意:嗅探基于 Gecko 的浏览器的推荐方法(如果您必须嗅探浏览器引擎而不是使用特性检测)是通过存在 Geckorv: 字符串,因为一些其他浏览器包含 like Gecko 令牌。

对于其他基于 Gecko 的产品,字符串可以采用以下两种形式之一,其中令牌的含义相同,除了下面提到的那些

Mozilla/5.0 (platform; rv:gecko-version) Gecko/gecko-trail app-name/app-version Mozilla/5.0 (platform; rv:gecko-version) Gecko/gecko-trail Firefox/firefox-version app-name/app-version

  • app-name/app-version 表示应用程序名称和版本。例如,这可以是 Camino/2.1.1SeaMonkey/2.7.1
  • Firefox/firefox-version 是一个可选的兼容性令牌,一些基于 Gecko 的浏览器可能会选择包含它,以实现与期望 Firefox 的网站的最大兼容性。firefox-version 通常表示与给定 Gecko 版本对应的 Firefox 等效版本。一些基于 Gecko 的浏览器可能不会选择使用此令牌;因此,嗅探器应该寻找 Gecko——而不是 Firefox!

移动设备和平板设备指示符

用户代理字符串的 platform 部分指示 Firefox 是否在手机大小或平板设备上运行。当 Firefox 在具有手机外形的设备上运行时,用户代理字符串的 platform 部分会有一个 Mobile; 令牌。当 Firefox 在平板设备上运行时,用户代理字符串的 platform 部分会有一个 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 媒体查询。但是,如果您使用用户代理嗅探来将内容定位到设备外形,请寻找 Mobi(包括使用“Mobi”的 Opera Mobile)用于手机外形,并且不要假定“Android”与设备外形之间存在任何关联。这样,您的代码将适用于 Firefox 在其他手机/平板操作系统上发布或 Android 用于笔记本电脑的情况。此外,请使用触摸检测来查找触摸设备,而不是寻找“Mobi”或“Tablet”,因为可能存在非平板的触摸设备。

注意:Firefox OS 设备在没有操作系统指示的情况下识别自身;例如:“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 用户代理字符串
x86 CPU 上的 Windows NT Mozilla/5.0 (Windows NT x.y; rv:10.0) Gecko/20100101 Firefox/10.0
x64 CPU 上的 Windows NT Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0

注意:在 Windows 11 上,aarch64 CPU 被报告为 x86_64,在 Windows 10 上被报告为 x86(因为它不支持 x64 仿真)。请参阅Bugzilla #1763310

macOS

这里,x.y 是 macOS 的版本(例如,macOS 10.15)。从 Firefox 87 开始,Firefox 将报告的 macOS 版本号限制为 10.15,因此 macOS 11.0 Big Sur 及更高版本在用户代理字符串中将报告为“10.15”。基于 ARM 的 Mac 在用户代理字符串中将报告为“Intel”。

Mac OS X 版本 Gecko 用户代理字符串
x86、x86_64 或 aarch64 上的 Mac OS X Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0
PowerPC 上的 Mac OS X Mozilla/5.0 (Macintosh; PPC Mac OS X x.y; rv:10.0) Gecko/20100101 Firefox/10.0

Linux

Linux 是一个更多样化的平台。您的 Linux 发行版可能包含一个更改用户代理的扩展。下面给出了一些常见示例。

Linux 版本 Gecko 用户代理字符串
i686 CPU 上的 Linux 桌面 Mozilla/5.0 (X11; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0
x86_64 CPU 上的 Linux 桌面 Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0

注意:在 Firefox 127.0 及更高版本中,32 位 x86 现在将在 Firefox 的用户代理字符串、navigator.platformnavigator.oscpu 中报告为 x86_64(请参阅Firefox 127.0 发布说明)。

适用于 Android 的 Firefox

适用于 Android 的 Firefox 在平台令牌中包含 Android 版本。为了提高互操作性,如果浏览器在版本低于 4 的系统上运行,它将报告 4.4。Android 4 及更高版本会准确报告版本。请注意,所有 Android 版本都附带相同功能相同的 Gecko。

外形 Gecko 用户代理字符串
手机 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

适用于 Android 的 Focus

从版本 1 开始,Focus 由 Android WebView 提供支持,并使用以下用户代理字符串格式

Mozilla/5.0 (Linux; <Android Version> <Build Tag etc.>) AppleWebKit/<WebKit Rev> (KHTML, like Gecko) Version/4.0 Focus/<focus version> Chrome/<Chrome Rev> Mobile Safari/<WebKit Rev>

WebView 上的平板电脑版本与移动版镜像,但不包含 Mobile 令牌。

从版本 6 开始,用户可以选择使用基于 GeckoView 的 Focus for Android,并带有隐藏的首选项:它使用 GeckoView 用户代理字符串来宣传 Gecko 兼容性。

Focus 版本(渲染引擎) 用户代理字符串
1.0 (WebView 手机) Mozilla/5.0 (Linux; Android 7.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.0 Chrome/59.0.3029.83 Mobile Safari/537.36
1.0 (WebView 平板电脑) Mozilla/5.0 (Linux; Android 7.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.0 Chrome/59.0.3029.83 Safari/537.36
6.0 (GeckoView) Mozilla/5.0 (Android 7.0; Mobile; rv:62.0) Gecko/62.0 Firefox/62.0

Klar 用户代理与Focus相同。

适用于 iOS 的 Firefox

适用于 iOS 的 Firefox 使用默认的 Mobile Safari 用户代理字符串,在 iPod 和 iPhone 上附加了一个 FxiOS/<version> 令牌,类似于适用于 iOS 的 Chrome 如何识别自己

外形 适用于 iOS 的 Firefox 用户代理字符串
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 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15

在 iPad 上,用户代理字符串与 Safari 完全相同。有关未在 iOS 上包含 FxiOS 的各种问题,请参阅mozilla-mobile/firefox-ios#6620

适用于 iOS 的 Focus

适用于 iOS 的 Focus 版本 7 使用以下格式的用户代理字符串

Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/7.0.4 Mobile/16B91 Safari/605.1.15

注意:此用户代理是从 iPhone XR 模拟器中获取的,在设备上可能有所不同。

适用于 Fire TV 的 Firefox

适用于 Fire TV 的 Firefox 版本 3(可能更早版本)使用以下格式的用户代理字符串

Mozilla/5.0 (Linux; <Android version>) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/<firefox-version> Chrome/<Chrome Rev> Safari/<WebKit Rev>
Firefox TV 版本 用户代理字符串
v3.0 Mozilla/5.0 (Linux; Android 7.1.2) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/3.0 Chrome/59.0.3017.125 Safari/537.36

适用于 Echo Show 的 Firefox

从版本 1.1 开始,适用于 Echo Show 的 Firefox 使用以下格式的用户代理字符串

Mozilla/5.0 (Linux; <Android version>) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/<firefox-version> Chrome/<Chrome Rev> Safari/<WebKit Rev>
适用于 Echo Show 的 Firefox 版本 用户代理字符串
v1.1 Mozilla/5.0 (Linux; Android 5.1.1) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.1 Chrome/59.0.3017.125 Safari/537.36

Firefox OS

外形 Gecko 用户代理字符串
手机 Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0
平板电脑 Mozilla/5.0 (Tablet; rv:26.0) Gecko/26.0 Firefox/26.0
电视 Mozilla/5.0 (TV; rv:44.0) Gecko/44.0 Firefox/44.0
设备专用 Mozilla/5.0 (Mobile; nnnn; rv:26.0) Gecko/26.0 Firefox/26.0

设备专用的用户代理字符串

尽管 Mozilla 强烈不鼓励,但一些手机制造商不幸地在其设备的用户代理字符串中包含一个表示其设备 ID 的令牌。如果出现这种情况,Firefox OS 用户代理字符串将类似于上表中设备专用的字符串,其中 nnnn; 是制造商的设备代码(请参阅指南)。我们注意到其中一些形式为“NexusOne;”、“ZTEOpen;”或“Open C;”(请注意,也不鼓励使用空格)。我们提供此信息是为了帮助您的用户代理检测逻辑,但 Mozilla 不鼓励在用户代理字符串中检测设备 ID。

以下是一个 JavaScript 正则表达式,可以检测所有移动设备,包括用户代理字符串中包含设备 ID 的设备

js
/mobi/i;

i 使其不区分大小写,mobi 匹配所有移动浏览器。

Firefox OS 版本号

虽然 Firefox OS 的版本号未包含在用户代理字符串中,但可以通过用户代理字符串中存在的 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 有一个四位版本号:X.X.X.Y。前两位由 Mozilla 产品团队拥有,表示具有新功能的版本(例如:v1.1、1.2 等)。第三位随着常规版本标签(大约每 6 周)递增,用于安全更新,第四位由 OEM 拥有。

另见