JavaScript:用户代理检测:通过浏览器识别平台、操作系统等(Windows, Mac, iOS,iPad等)
客户端检测经常用的方法:能力检测、怪癖检测和用户代理检测。
能力检测:在写代码前先检测浏览器的能力。
怪癖检测:实际上是浏览器现存的bug。
用户代理检测:通过检测用户代理字符串来识别浏览器。
一般优先考虑使用 能力检测,怪癖检测是第二种选择,用户代理检测是最后一种方案。
1 var client = function () {
2 // 引擎
3 var engine = {
4 ie: 0,
5 gecko: 0,
6 webkit: 0,
7 khtml: 0,
8 opera: 0,
9 version: null // 版本号
10 };
11 // 浏览器
12 var brower = {
13 ie: 0,
14 firefox: 0,
15 safari: 0,
16 konq: 0,
17 opera: 0,
18 chrome: 0,
19 version: null // 版本号
20 };
21
22 // 平台、设备、操作系统
23 var system = {
24 win: false,
25 mac: false,
26 xll: false,// Unix
27
28 // 移动设备
29 iphone: false,
30 ipod: false,
31 ipad: false,
32 ios: false,
33 android: false,
34 nokiaN: false,// 诺基亚N系列手机
35 winMobile: false,
36
37 // 游戏系统
38 wii: false,// 任天堂
39 ps: false
40 };
41
42 // 检测引擎和浏览器
43 var ua = navigator.userAgent;
44 if (window.opera) {
45 engine.version = brower.version = window.opera.version();
46 engine.opera = brower.opera = parseFloat(engine.version);
47 } else if (/AppleWebKit\/(\S+)/.test(ua)) {
48 engine.version = RegExp["$1"];
49 engine.webkit = parseFloat(engine.version);
50
51 // chrome or safari
52 if (/Chrome\/(\S+)/.test(ua)) {
53
54 if (/Edg\/(\S+)/ig.test(ua)) {
55 engine.version = brower.version = RegExp["$1"];
56 engine.ie = brower.ie = parseFloat(engine.version);
57 } else {
58 brower.version = RegExp["$1"];
59 brower.chrome = parseFloat(brower.version);
60 }
61 } else if (/Version\/(\S+)/.test(ua)) {
62 brower.version = RegExp["$1"];
63 brower.safari = parseFloat(brower.version);
64 } else {
65 // 近似确定版本号
66 var safariVersion = 1;
67 if (engine.webkit < 100) {
68 safariVersion = 1;
69 } else if (engine.webkit < 312) {
70 safariVersion = 1.2;
71 } else if (engine.webkit < 412) {
72 safariVersion = 1.3;
73 } else {
74 safariVersion = 3;
75 }
76 brower.safari = brower.version = safariVersion;
77 }
78 } else if (/KHTML\/(\S+)/.test(ua) || /Konqueror\/([^;]+)/.test(ua)) {
79 engine.version = brower.version = RegExp["$1"];
80 engine.khtml = brower.konq = parseFloat(brower.version);
81
82 } else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)) {
83 engine.version = RegExp["$1"];
84 engine.gecko = parseFloat(engine.version);
85
86 // 确定是否是Firefox
87 if (/FireFox\/(\S+)/.test(ua)) {
88 brower.version = RegExp["$1"];
89 brower.firefox = parseFloat(brower.version);
90 }
91
92 } else if (/MSIE ([^;]+)/.test(ua)) {
93 // 不适用IE11和Edge
94 engine.version = brower.version = RegExp["$1"];
95 engine.ie = brower.ie = parseFloat(engine.version);
96 } else if (/rv:([^\)]+)\)/.test(ua)) {
97 // 判断IE11
98 engine.version = brower.version = RegExp["$1"];
99 engine.ie = brower.ie = parseFloat(engine.version);
100 }
101
102
104 // 检测浏览器
105 brower.ie = engine.ie;
106 brower.opera = engine.opera;
107
108 // 检测平台
109 var p = navigator.platform;
110 system.win = p.indexOf("Win") == 0;
111 system.mac = p.indexOf("Mac") == 0;
112 system.xll = (p.indexOf("Linux") == 0) || (p == "Xll");
113
114 // 检测windows操作系统
115 if (system.win) {
116 if (/Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)) {
117 if (RegExp["$1"] == "NT") {
118 switch (RegExp["$2"]) {
119 case "5.0":
120 system.win = "2000";
121 break;
122 case "5.1":
123 system.win = "XP";
124 break;
125 case "6.0":
126 system.win = "Vista";
127 break;
128 case "6.1":
129 system.win = "7";
130 break;
131 default:
132 system.win = "NT";
133 break;
134
135 }
136 } else if (RegExp["$1"] == "9x") {
137 system.win = "ME";
138 } else {
139 system.win = RegExp["$1"]
140 }
141 }
142 }
143
144 // 移动设备
145 system.iphone = ua.indexOf("iPhone") > -1;
146 system.ipod = ua.indexOf("iPod") > -1;
147 system.ipad = ua.indexOf("iPad") > -1;
148 system.nokiaN = ua.indexOf("NokiaN") > -1;
149
150 // windows phone
151 if (system.win == "CE") {
152 system.winMobile = system.win;
153 } else if (system.win == "Ph") {
154 if (/Windows Phone OS (\d+.\d+)/.test(us)) {
155 system.win = "Phone";
156 system.winMobile = parseFloat(RegExp["$1"])
157 }
158 }
159
160 // 检测IOS版本
161 if (system.mac && ua.indexOf("Mobile") > -1) {
162 if (/CPU (?:iPhone )?OS (\d+_\d+)/.test(ua)) {
163 system.ios = parseFloat(RegExp.$1.replace("_", "."));
164
165 } else {
166 system.ios = 2;
167 }
168 }
169
170 // 检测Android版本
171 if (/Android (\d+\.\d+)/.test(ua)) {
172 system.android = parseFloat(RegExp.$1);
173 }
174
175 // 游戏系统
176 system.wii = ua.indexOf("Wii") > -1;
177 system.ps = /playstation/i.test(ua);
178
179 return {
180 engine: engine,
181 brower: brower,
182 system: system
183 };
184
185 }();
Windows操作系统下部分浏览器测试结果:

JavaScript:用户代理检测:通过浏览器识别平台、操作系统等(Windows, Mac, iOS,iPad等)的更多相关文章
- 用户代理检测与浏览器Ua详细分析
用户代理检测与浏览器Ua详细分析:http://www.cnblogs.com/hykun/p/Ua.html
- 【javascript】—— JS判断浏览器类型、操作系统
navigator.userAgent : userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值. navigator.platform : platform ...
- linux, windows, mac, ios等平台GCC预编译宏判断
写跨平台c/c++程序的时候,需要搞清各平台下面的预编译宏,区分各平台代码.而跨平台c/c++编程,GCC基本在各平台都可以使用.整理了一份各平台预编译宏的判断示例. 需要注意几点: * window ...
- JavaScript功能检测技术和函数构造
Javascript与很多编程语言不同,它不能够控制其运行环境.再写php代码时,只要在服务器端部署了正确的版本,那么程序就绝对能够运行,对于其他python或ruby后端语言来说,也不存在什么灰色区 ...
- 【javascript】浏览器用户代理检测脚本实现
以下是完整的用户代理字符串检测脚本,包括检测呈现引擎.平台.Windows操作系统.移动设备和游戏系统. var client = function(){ // 呈现引擎 var engine = { ...
- javascript——处理(获取)浏览器版本、操作系统
javascript——处理(获取)浏览器版本.操作系统 /** * Created by Administrator on 15-1-12. */ function BroswerUtil() { ...
- Javascript高级编程学习笔记(34)—— 客户端检测(3)用户代理检测
用户代理检测 前面的文章介绍的是如何检测浏览器对某一功能的支持情况 但是在实践中我们有些时候免不了需要知道用户到底是用的什么浏览器对我们的站点进行访问 这也是统计用户行为的一部分 用户代理检测这种方式 ...
- javascript关于检测浏览器和操作系统的问题
1.方法学: 最好是检测浏览器的最小版本,这样才不会当版本升级之后不断添加新的内容进去. 理想的方式: if(isMinIE5){ //code } 直接检查准确的版本的缺点: if(isMinIE5 ...
- javascript检测当前浏览器是否为微信浏览器
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 第一百四十节,JavaScript,封装库--浏览器检测
JavaScript,封装库--浏览器检测 在函数库编写一个,浏览器检测对象 /** sys浏览器检测对象,对象下有两个属性,liu_lan_qi属性和xi_tong属性 * liu_lan_qi属性 ...
随机推荐
- 使用官方推荐的库来测react hook组件
最近写单元测试的时候遇见了一些问题,当我使用使用jest测React. useRef, React. useEffect时,总是测不到, 然后我去查阅了一下官方文档,它推荐了使用下面这个库 @tes ...
- C语言基础-结构体基础
文章目录 前言 1.结构体的创建 1.1 第一种方法 1.2 第二种方法 1.3 全局结构体和局部结构体的声明 2.结构体的使用 2.1 局部结构体的声明 & 初始化 2.1.1 指针方法 2 ...
- Linux 文件系统的设计
一 硬盘的最小存储单元是扇区,扇区大小为512B 文件系统将硬盘划分为固定大小的块(block),最常见的块大小为4KB 块是文件系统读写硬盘的最小单位 二 文件系统设计面临的基本问题: 用户怎么找到 ...
- OpenCV4之特征提取与对象检测
1.图像特征概述 图像特征的定义与表示 图像特征表示是该图像唯一的表述,是图像的DNA 图像特征提取概述 传统图像特征提取 - 主要基于纹理.角点.颜色分布.梯度.边缘等 深度卷积神经网络特征提取 - ...
- 磁盘问题和解决: fsck,gdisk,fdisk等
错误: Resize inode not valid 对于gpt分区的硬盘一般fsck只能检查分区, 不能用于检查整个硬盘, 但是如果对硬盘设备运行时遇到这样的错误 $ sudo fsck -n /d ...
- Go 语言 select 都能做什么?
原文链接: Go 语言 select 都能做什么? 在 Go 语言中,select 是一个关键字,用于监听和 channel 有关的 IO 操作. 通过 select 语句,我们可以同时监听多个 ch ...
- Notepad正则表达式用法
https://blog.csdn.net/cuckoo1/article/details/52165449
- SpringCloud-Hystrix服务熔断与降级工作原理&源码
先附上Hystrix源码图 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用 ...
- [linux]搭建nfs
环境 说明 IP 系统版本 服务端 192.168.137.7 centos 7 客户端 192.168.137.8 centos 7 步骤 配置服务端 安装 nfs 服务 yum install - ...
- CAP 7.2 版本发布通告
前言 今天,我们很高兴宣布 CAP 发布 7.2 版本正式版,我们在这个版本中主要致力于 Dashboard 对 k8s 服务发现的支持. 从 7.1 版本以来,我们发布了4个小版本,在这些版本中我们 ...