JavaScript之如何对客户端进行检测

 本文主要是针对各种客户端进行检测,使用了用户代理字符串检测技术,具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
var client=function() {
  var engine= {
    // 呈现引擎
    ie: 0, gecko: 0, webkit: 0, khtml: 0, opera: 0, //其他版本号
    ver: null
  }
  ;
  var browser= {
    // 浏览器
    ie: 0, firefox: 0, safari: 0, konq: 0, opera: 0, chrome: 0, // 其他的版本
    ver: null
  }
  ;
  var system= {
    win: false, mac: false, xll: false, // 移动设备
    iphone: false, ipod: false, ipad: false, ios: false, android: false
  }
  ; // 在此检测呈现引擎,平台和设备
  return {
    engine: engine, browser: browser, system: system
  }
  ;
}
 
();//( )函数将参数传递来的字符串中的十六进制码转换成 ASCII 码并返回,它完成 escape( ) 函数的逆操作。
var engine=client;
var browser=client;
var ua=navigator.userAgent.toLowerCase();
if(ua.match(/opr/([d.]+)/) || window.opera) {
  var result=ua.match(/opr/([d.]+)/);
  engine.ver=browser.ver=result[1];
  engine.opera=browser.opera=parseFloat(engine.ver);
  if(window.opera) {
    engine.ver=browser.ver=window.opera.version();
    engine.opera=browser.opera=parseFloat(engine.ver);
  }
}
 
else if(/applewebkit/(S+)/.test(ua)) {
  engine.ver=RegExp["$1"];
  engine.webkit=parseFloat(engine.ver); // 确定是chrome还是safari
  /*              * chrome用户代理字符串              * Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)               * Chrome/42.0.2311.152 Safari/537.36              */
   
  if(/chrome/(S+)/.test(ua)) {
    browser.ver=RegExp["$1"];
    browser.chrome=parseFloat(browser.ver);
  }
  else if(/version/(S+)/.test(ua)) {
    /*                    * safari用户代理字符串                    * Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko)                     * Version/5.1.7 Safari/534.57.2                    */
     
    browser.ver=RegExp["$1"];
    browser.safari=parseFloat(browser.ver);
  }
  else {
    //近似地确定版本号
    var safariVersion=1;
    if (engine.webkit < 100) {
      safariVersion=1;
    }
    else if (engine.webkit < 312) {
      safariVersion=1.2;
    }
    else if (engine.webkit < 412) {
      safariVersion=1.3;
    }
    else {
      safariVersion=2;
    }
    browser.safari=browser.ver=safariVersion;
  }
}
 
else if (/khtml/(S+)/.test(ua) || /konqueror/([^;
]+)/.test(ua)) {
  engine.ver=browser.ver=RegExp["$1"];
  engine.khtml=browser.konq=parseFloat(engine.ver);
}
 
else if(/rv:([^)]+)) gecko/d {
  8
}
 
/.test(ua)) {
  engine.ver=RegExp["$1"];
  engine.gecko=parseFloat(engine.ver);
  /*                * firefox的用户代理的字符串                * Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0)                 * Gecko/20100101 Firefox/38.0                */
   
  // 确定是不是firefox
  if(/firefox/(S+)/.test(ua)) {
    browser.ver=RegExp["$1"];
    browser.firefox=parseFloat(browser.ver);
  }
}
 
else if (/msie ([^;
]+)/.test(ua) || "ActiveXObject" in window) {
  if("ActiveXObject" in window) {
    if(/msie ([^;
    ]+)/.test(ua)) {
      engine.ver=browser.ver=RegExp["$1"];
      engine.ie=browser.ie=parseFloat(engine.ver);
    }
    else {
      if(/rv: ([^)]+))/.test(ua)) {
        engine.ver=browser.ver=RegExp["$1"];
        engine.ie=browser.ie=parseFloat(engine.ver);
      }
    }
  }
} // 检测平台
var system=client;
var platform=navigator.platform;
system.win=platform.indexOf("Win")==0;
system.mac=platform.indexOf("Mac")==0;
system.x11=(platform.indexOf("X11")==0) || (platform.indexOf("Linux")==0); // 移动设备
system.iphone=ua.indexOf("iphone") > -1;
system.ipod=ua.indexOf("ipod") > -1;
system.ipad=ua.indexOf("ipad") > -1; //检测iOS 版本
if (system.mac && ua.indexOf("mobile") > -1) {
  if (/cpu (?: iphone)?os (d+_d+)/.test(ua)) {
    system.ios=parseFloat(RegExp.$1.replace("_", "."));
  }
  else {
    system.ios=2; //不能真正检测出来,所以只能猜测
  }
} //检测Android 版本
if (/android (d+.d+)/.test(ua)) {
  system.android=parseFloat(RegExp.$1);
}

  参考网址

posted @   HalfWater  阅读(384)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
阅读排行:
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 个人数据保全计划:从印象笔记迁移到joplin
· Vue3.5常用特性整理
· 重拾 SSH:从基础到安全加固
· 为什么UNIX使用init进程启动其他进程?
点击右上角即可分享
微信分享提示