每个浏览器都有它自己的用户代理(user agent)字符串,里面包含了浏览器和操作系统等信息。通过使用这个字符串,我们可以处理跨浏览器的差异。用户代理字符串保存在 JavaScript 的 navigator.userAgent 变量中。我们先来看看各个主流浏览器在各个平台的用户代理字符串的例子。
1. IE 和 IE Mobile 浏览器
系统平台 | 浏览器 | 用户代理字符串 |
Windows | IE 9 | Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) |
Windows | IE 10 | Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0) |
Windows | IE 11 | Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko |
Windows Phone | IE 10 | Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) |
2. Firefox 和 Firefox Mobile 浏览器
系统平台 | 用户代理字符串 |
Windows | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2 |
Android | Mozilla/5.0 (Android; Mobile; rv:18.0) Gecko/18.0 Firefox/18.0 |
3. Opera 和 Opera Mobile 浏览器
在 Opera 12 及之前,使用的是 Presto 渲染引擎,它的 UA 字符串为:
系统平台 | 用户代理字符串 |
Windows | Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.12 |
Android | Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/ADR-1301071546) Presto/2.11.355 Version/12.10 |
而从 Opera 14 开始,它改用 Chrome 的 WebKit/Blink 渲染引擎,UA 字符串改变为:
系统平台 | 用户代理字符串 |
Windows | Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0 Safari/537.36 OPR/15.0 |
Android | Mozilla/5.0 (Linux; Android 4.1.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0 Mobile Safari/537.36 OPR/16.0 |
4. Chrome 和 Chrome Mobile 浏览器
系统平台 | 用户代理字符串 |
Windows | Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17 |
Android Phone | Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19 |
Android Tablet | Mozilla/5.0 (Linux; Android 4.2; Nexus 7 Build/JOP40C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19 |
Chrome OS | Mozilla/5.0 (X11; CrOS armv7l 3428.193.0) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.126 Safari/537.22 |
iPhone* | Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_2 like Mac OS X; en-us) AppleWebKit/536.26 (KHTML, like Gecko) CriOS/23.0.1271.100 Mobile/10A551 Safari/8536.25 |
iPad* | Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X; zh-cn) AppleWebKit/534.46 (KHTML, like Gecko) CriOS/23.0.1271.100 Mobile/9B206 Safari/7534.48.3 |
注意 Chrome for iOS 声称它是 CriOS。这是由于它只能使用 iOS 的 UIWebView 提供的网页渲染和脚本解释引擎,和 Chrome for Android 差别很大,而更加像 Safari for iOS。
5. Safari 和 Safari Mobile 浏览器
系统平台 | 用户代理字符串 |
Windows | Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2 |
Macintosh | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10 |
iPhone | Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7 |
iPad | Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3 |
Android* | Mozilla/5.0 (Linux; U; Android 2.3.4; zh-cn; SonyEricssonMT15i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 |
Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; M040 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 |
这里的 Safari for Android 指的是 Android 自带的浏览器;从用户代理字符串看,不论 Android 的版本,它都声称是 Safari Mobile 4.0。实际上它和 Chrome 一样也是从 Chromium 中移植出来的。
这里顺便整理并记录各版本 iOS 系统自带的 Safari Mobile 浏览器的版本,如下:
iPhone OS 1.0 | iPhone OS 2.0 | iPhone OS 3.0 | iOS 4.0 | iOS 4.3 | iOS 5.0 | iOS 6.0 |
Safari 3.0 | Safari 3.1 | Safari 4.0 | Safari 4.0 | Safari 5.0 | Safari 5.1 | Safari 6.0 |
6. 国内的各个浏览器
国内也有好几个基于 WebKit 内核的浏览器(IE 内核的这里不讨论),它们的 user agent 字符串如下面的例子:
浏览器 | 用户代理字符串 |
傲游桌面浏览器 | Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/533.9 (KHTML, like Gecko) Maxthon/3.0 Safari/533.9 |
傲游移动浏览器 | Mozilla/5.0 (Linux; U; Android 2.3.4; zh-cn; MT15i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Maxthon/4.0.3.3000 |
搜狗浏览器 | Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.802.30 Safari/535.1 SE 2.X MetaSr 1.0 |
百度桌面浏览器 | Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.7 (KHTML, like Gecko) Safari/534.7 Chrome/7.0 baidubrowser/1.x |
百度移动浏览器 | 手机 UA:Mozilla/5.0 (Linux; U; Android 2.3.4; zh-cn; MT15i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) FlyFlow/2.4 Version/4.0 Mobile Safari/533.1 baidubrowser/042_1.8.4.2_diordna_458_084/nosscirE-ynoS_01_4.3.2_i51TM/1000464b/174FA38EF54F67DF0EBC472658BA862B%7C101931900307210/1 |
电脑 UA:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/531.1 (KHTML, like Gecko) FlyFlow/2.4 Version/5.0 Safari/531.1 baidubrowser/042_1.8.4.2_diordna_458_084/nosscirE-ynoS_01_4.3.2_i51TM/1000464b/174FA38EF54F67DF0EBC472658BA862B%7C101931900307210/1 | |
360 极速浏览器 | Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Safari/535.1 Chrome/14.0.835.202 360EE |
360 移动浏览器 | Mozilla/5.0 (Linux; U; Android 2.3.4; zh-cn; MT15i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1; 360browser(securitypay,securityinstalled); 360 Aphone Browser (3.2.1) |
QQ 桌面浏览器 | Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.36 (KHTML, like Gecko) Chrome/12.0.742.53 Safari/534.36 QQBrowser/6.5.9225.201 |
QQ 移动浏览器 | 中转浏览:MQQBrowser/2.9/Adr (Linux; U; 2.3.4; zh-cn; MT15i Build/4.0.2.A.0.62;480*854) |
直接浏览:MQQBrowser/2.9/Mozilla/5.0 (Linux; U; Android 2.3.4; zh-cn; MT15i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 | |
直接浏览:Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) MQQBrowser/3.1 Mobile/8L1 Safari/7534.48.3 | |
UC 浏览器 | Mozilla/5.0 (Linux; U; Android 2.3.4; zh-cn; MT15i Build/4.0.2.A.0.62) UC AppleWebKit/530+ (KHTML, like Gecko) Mobile Safari/530 |
可以看到大部分浏览器都兼容 Safari 或 Chrome 的 UA 字符串。但是还是有很多胡乱使用的地方。比如 UC 浏览器比较古怪(在 UC 8.2 for Android 2.3 中测试):在 user agent 中竟然不包含自己的版本号。
7. navigator.platform
如果需要检测用户使用的操作系统,除了 navigator.userAgent 之外也可以用 navigator.platform。例如:
var platform = (function() { var pl = navigator.platform; if (pl.indexOf('Win') == 0) { return 'windows'; } else if (pl.indexOf('Mac') == 0) { return 'macos'; } else if (pl.indexOf('Linux') == 0 || pl.indexOf('X11') == 0) { return 'linux'; } else if (pl.indexOf('iPhone') == 0 || pl.indexOf('iPad') == 0) { return 'ios'; } else if (pl.indexOf('Android') == 0) { return 'android'; } else { return 'unknown'; } })();
但是用 navigator.platform 判断是否 Android 并不可靠。在一台 Android 2.3 手机上测试,发现只有 Opera Mobile 给出 "Android" 的结果,Android browser 和 Firefox Mobile 都给出 "Linux armv7l"。
参考资料:
[1] HTML DOM userAgent 属性
[2] User agent - Wikipedia, the free encyclopedia
[3] UserAgentString.com
[4] Chrome for Android User-Agent - Google Chrome Mobile - Google Developers
[5] FAQ - Google Chrome Mobile - Google Developers
[6] User Agent Strings Reference | MDN
[7] Gecko user agent string reference | MDN
[8] window.navigator.platform - MDN
[9] Don’t forget navigator.platform
[A] History of the user-agent string | NCZOnline
[B] Optimizing Web Content
[C] JavaScript - Browser detect
[D] The perils of iOS user agent strings - Art.sy Engineering
[E] differences between uiwebview and mobile safari - stackoverflow
[F] 手机 QQ 浏览器 User-Agent 使用指南
[G] Opera User Agent strings: Opera 15 and beyond
[H] MSDN - User-agent string changes
[I] MSDN Blogs - Internet Explorer 11’s Many User-Agent Strings
[YAML] Updated: 2013-11-18 16:48:00