网页设计学习笔记

HTML,CSS,JavaScript

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

每个浏览器都有它自己的用户代理(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

posted on 2012-04-06 15:30  zoho  阅读(7587)  评论(0编辑  收藏  举报