每個瀏覽器都有它自己的用戶代理(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