以下是完整的用户代理字符串检测脚本,包括检测呈现引擎、平台、Windows操作系统、移动设备和游戏系统。

  1. var client = function(){
  2.  
  3. // 呈现引擎
  4. var engine = {
  5. ie: 0,
  6. gecko: 0,
  7. webkit: 0,
  8. khtml: 0,
  9. opera: 0,
  10. // 完整的版本号
  11. ver: null
  12. };
  13.  
  14. // 浏览器
  15. var browser = {
  16. // 主要浏览器
  17. ie: 0,
  18. firefox: 0,
  19. safari: 0,
  20. konq: 0,
  21. opera: 0,
  22. chrome: 0,
  23. // 具体的版本号
  24. ver: null
  25. };
  26.  
  27. // 平台、设备和操作系统
  28. var system = {
  29. win: false,
  30. mac: false,
  31. x11: false,
  32.  
  33. // 移动设备
  34. iphone: false,
  35. ipod: false,
  36. ipad: false,
  37. ios: false,
  38. android: false,
  39. nokiaN: false,
  40. winMobile: false,
  41.  
  42. // 游戏系统
  43. wii: false,
  44. ps: false
  45. };
  46.  
  47. // 检测呈现引擎和浏览器
  48. var ua = navigator.userAgent;
  49. if (window.opera){
  50. engine.ver = browser.ver = window.opera.version();
  51. engine.opera = browser.opera = parseFloat(engine.ver);
  52. }
  53. else if (/AppleWebKit\/(\S+)/.test(ua)){
  54. engine.ver = RegExp["$1"];
  55. engine.webkit = parseFloat(engine.ver);
  56.  
  57. // 确定是Chroeme还是Safari
  58. if (/Chrome\/(\S+)/.test(ua)){
  59. browser.ver = RegExp["$1"];
  60. browser.chrome = parseFloat(browser.ver);
  61. } else if (/Version\/(\S+)/.test(ua)){
  62. browser.ver = RegExp["$1"];
  63. browser.safari = parseFloat(browser.ver);
  64. }
  65. else {
  66. // 近似地确定版本号
  67. var safariVersion = 1;
  68. if (engine.webkit < 100){
  69. safariVersion = 1;
  70. } else if (engine.webkit < 312){
  71. safariVersion = 1.2;
  72. } else if (engine.webkit < 412){
  73. safariVersion = 1.3;
  74. } else {
  75. safariVersion = 2;
  76. }
  77.  
  78. browser.safari = browser.ver = safariVersion;
  79. }
  80. }
  81. else if (/KHTML\/(\S+)/.test(ua) || /Konqueror\/([^;]+)/.test(ua)){
  82. engine.ver = browser.ver = RegExp["$1"];
  83. engine.khtml = browser.konq = parseFloat(engine.ver);
  84. }
  85. else if (/rv:([^\)]+)\) Gecko\/\d{8}/.test(ua)){
  86. engine.ver = RegExp["$1"];
  87. engine.gecko = parseFloat(engine.ver);
  88.  
  89. // 确定是不是Firefox
  90. if (/Firefox\/(\S+)/.test(ua)){
  91. browser.ver = RegExp["$1"];
  92. browser.firefox = parseFloat(browser.ver);
  93. }
  94. }
  95. else if (/MSIE ([^;]+)/.test(ua)){
  96. engine.ver = browser.ver = RegExp["$1"];
  97. engine.ie = browser.ie = parseFloat(engine.ver);
  98. }
  99.  
  100. // 检测浏览器
  101. browser.ie = engine.ie;
  102. browser.opera = engine.opera;
  103.  
  104. // 检测平台
  105. var p = navigator.platform;
  106. system.win = p.indexOf("Win") == 0;
  107. system.mac = p.indexOf("Mac") == 0;
  108. system.x11 = (p == "x11") || (p.indexOf("Linux") == 0);
  109.  
  110. // 检测windows操作系统
  111. if(system.win){
  112. if(/win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)){
  113. if(RegExp["$1"] == "NT"){
  114. switch(RegExp["$2"]){
  115. case "5.0":
  116. system.win = "2000";
  117. break;
  118. case "5.1":
  119. system.win = "XP";
  120. break;
  121. case "6.0":
  122. system.win = "Vista";
  123. break;
  124. case "6.1":
  125. system.win = "7";
  126. break;
  127. default:
  128. system.win = "NT";
  129. break;
  130. }
  131. }
  132. else if(RegExp["$1"] == "9x"){
  133. system.win = "ME";
  134. }
  135. else{
  136. system.win = RegExp["$1"];
  137. }
  138. }
  139. }
  140.  
  141. // 移动设备
  142. system.iphone = ua.indexOf("iPhone") > -1;
  143. system.ipod = ua.indexOf("iPod") > -1;
  144. system.ipad = ua.indexOf("iPad") >-1;
  145. system.nokiaN = ua.indexOf("NokiaN") > -1;
  146.  
  147. // windows mobile
  148. if(system.win == "CE"){
  149. system.winMobile = system.win;
  150. }
  151. else if(system.win == "Ph" ){
  152. if(/Windows Phone OS (\d+.\d+)/.test(ua)){
  153. system.win = "Phone";
  154. system.winMobile = parseFloat(RegExp["$1"]);
  155. }
  156. }
  157.  
  158. // 检测IOS版本
  159. if(system.mac && ua.indexOf("Mobile")> -1){
  160. if(/CPU (?:Phone )?OS (\d+_\d+)/.test(ua)){
  161. system.ios = parseFloat(RegExp.$1.replace("_","."));
  162. }
  163. else{
  164. system.ios = 2;
  165. // 不能真正检测出来,所以只能猜测
  166. }
  167. }
  168.  
  169. // 检测Android版本
  170. if(/Android (\d+\.\d+)/.test(ua)){
  171. system.android = parseFloat(RegExp.$1);
  172. }
  173.  
  174. // 游戏系统
  175. system.wii = ua.indexOf("Wii") > -1;
  176. system.ps = /playstation/i.test(ua);
  177.  
  178. // 返回这些对象
  179. return {
  180. engine: engine,
  181. browser: browser,
  182. system: system
  183. };
  184.  
  185. // console.log(engine);
  186. // console.log(browser);
  187. // console.log(system);
  188. }();

  

【javascript】浏览器用户代理检测脚本实现的更多相关文章

  1. 第一百一十二节,JavaScript浏览器检测

    JavaScript浏览器检测 学习要点: 1.navigator对象 2.客户端检测 由于每个浏览器都具有自己独到的扩展,所以在开发阶段来判断浏览器是一个非常重要的步骤.虽然浏览器开发商在公共接口方 ...

  2. JavaScript浏览器检测之navigator 对象

    一.使用客户端检测的原因 由于每个浏览器都具有自己独到的扩展,所以在开发阶段来判断浏览器是一个非常重要的步骤. 虽然浏览器开发商在公共接口方面投入了很多精力,努力的去支持最常用的公共功能: 但在现实中 ...

  3. JavaScript浏览器检测之客户端检测

    客户端检测一共分为三种,分别为:能力检测.怪癖检测和用户代理检测,通过这三种检测方案,我们可以充分的了解当前浏览器所处系统.所支持的语法.所具有的特殊性能. 一.能力检测: 能力检测又称作为特性检测, ...

  4. JavaScript笔记——BOM的操作和浏览器的检测

    BOM的操作 BOM 也叫浏览器对象模型,它提供了很多对象,用于访问浏览器的功能.BOM 缺少规范,每个浏览器提供商又按照自己想法去扩展它,就可能存在浏览器不兼容的情况,那么浏览器共有对象就成了事实的 ...

  5. 用户代理检测与浏览器Ua详细分析

    用户代理检测与浏览器Ua详细分析:http://www.cnblogs.com/hykun/p/Ua.html

  6. Javascript高级编程学习笔记(34)—— 客户端检测(3)用户代理检测

    用户代理检测 前面的文章介绍的是如何检测浏览器对某一功能的支持情况 但是在实践中我们有些时候免不了需要知道用户到底是用的什么浏览器对我们的站点进行访问 这也是统计用户行为的一部分 用户代理检测这种方式 ...

  7. 不支持javascript的浏览器将JS脚本显示为页面内容

    不支持javascript的浏览器将JS脚本显示为页面内容.为了防止这种情况发生,您可以使用这样的HTML注释标记:<html ><体><script type=“tex ...

  8. BOM之navigator对象和用户代理检测

    前面的话 navigator对象现在已经成为识别客户端浏览器的事实标准,navigator对象是所有支持javascript的浏览器所共有的.本文将详细介绍navigator对象和用户代理检测 属性 ...

  9. JavaScript常用的Hook脚本

    JavaScript常用的Hook脚本 本文Hook脚本 来自 包子 页面最早加载代码Hook时机 在source里 用dom事件断点的script断点 然后刷新网页,就会断在第一个js标签,这时候就 ...

随机推荐

  1. Docker 使用指南 (五)—— Dockerfile 详解

    版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/97 来源:腾云阁 https://www.qclou ...

  2. webpack中,css中打包背景图,路径报错

    css-loader: //打包样式中背景图 { test: /\.(png|jpg)$/, loader: "url-loader?limit=8192&name=images/[ ...

  3. WEB安全番外第六篇--关于通过记录渗透工具的Payload来总结和学习测试用例

    背景: 在WEB安全的学习过程中,了解过了原理之后,就是学习各种Payload,这里面蕴藏着丰富的知识含量,是在基本上覆盖了漏洞原理之后的进一步深入学习的必经之路.无理是Burpsuite还是Sqlm ...

  4. Intellij IDEA同时打开多个项目

    extends:http://www.kaifazhe.me/java/99.html 使用eclipse习惯的同学知道是可以同时多个项目查看的,只需要import就可以了,但Intellij IDE ...

  5. DGbroker快速失败转移

    1.先决条件 DGMGRL> ENABLE FAST_START FAILOVER; Error: ORA-: requirements not met for enabling fast-st ...

  6. 手机相册管理(gallery) ---- HTML5+

    模块:gallery Gallery模块管理系统相册,支持从相册中选择图片或视频文件.保存图片或视频文件到相册等功能.通过plus.gallery获取相册管理对象. 管理我们手机上用到的相册:选择图片 ...

  7. Hive格式化输出数据库和表详细信息

    hive> desc database extended wx_test; OK wx_test hdfs://ns1/user/hive/warehouse/wx_test.db hadoop ...

  8. numpy基础入门

    1.Numpy是什么 很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过nu ...

  9. java实现创建临时文件然后在程序退出时自动删除文件(转)

    这篇文章主要介绍了java实现创建临时文件然后在程序退出时自动删除文件,从个人项目中提取出来的,小伙伴们可以直接拿走使用. 通过java的File类创建临时文件,然后在程序退出时自动删除临时文件.下面 ...

  10. redis缓存数据架构实战

    redis命令参考:http://redisdoc.com/ 与memcache对比 redis安装配置 yum安装 yum -y install redis 源码安装 PS:make报错**问题:* ...