javascript浏览器用户代理检测脚本实现方法


Posted in Javascript onOctober 27, 2017

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

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, 
  x11: false, 
 
  // 移动设备 
  iphone: false, 
  ipod: false, 
  ipad: false, 
  ios: false, 
  android: false, 
  nokiaN: false, 
  winMobile: false, 
 
  // 游戏系统 
  wii: false, 
  ps: false
 }; 
 
 // 检测呈现引擎和浏览器 
  var ua = navigator.userAgent;  
 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); 
 
  // 确定是Chroeme还是Safari 
   if (/Chrome\/(\S+)/.test(ua)){ 
   browser.ver = RegExp["$1"]; 
   browser.chrome = parseFloat(browser.ver); 
  } else if (/Version\/(\S+)/.test(ua)){ 
   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 
   if (/Firefox\/(\S+)/.test(ua)){ 
   browser.ver = RegExp["$1"]; 
   browser.firefox = parseFloat(browser.ver); 
  } 
 } 
 else if (/MSIE ([^;]+)/.test(ua)){  
  engine.ver = browser.ver = RegExp["$1"]; 
  engine.ie = browser.ie = parseFloat(engine.ver); 
 } 
 
 // 检测浏览器 
 browser.ie = engine.ie; 
 browser.opera = engine.opera; 
 
 // 检测平台 
 var p = navigator.platform; 
 system.win = p.indexOf("Win") == 0; 
 system.mac = p.indexOf("Mac") == 0; 
 system.x11 = (p == "x11") || (p.indexOf("Linux") == 0); 
 
 // 检测windows操作系统 
 if(system.win){ 
  if(/win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)){ 
   if(RegExp["$1"] == "NT"){ 
    switch(RegExp["$2"]){ 
     case "5.0": 
      system.win = "2000"; 
      break; 
     case "5.1": 
      system.win = "XP"; 
      break; 
     case "6.0": 
      system.win = "Vista"; 
      break; 
     case "6.1": 
      system.win = "7"; 
      break; 
     default: 
      system.win = "NT"; 
      break; 
    } 
   } 
   else if(RegExp["$1"] == "9x"){ 
    system.win = "ME"; 
   } 
   else{ 
    system.win = RegExp["$1"]; 
   } 
  } 
 } 
 
 // 移动设备 
 system.iphone = ua.indexOf("iPhone") > -1; 
 system.ipod = ua.indexOf("iPod") > -1; 
 system.ipad = ua.indexOf("iPad") >-1; 
 system.nokiaN = ua.indexOf("NokiaN") > -1; 
 
 // windows mobile 
 if(system.win == "CE"){ 
  system.winMobile = system.win; 
 } 
 else if(system.win == "Ph" ){ 
  if(/Windows Phone OS (\d+.\d+)/.test(ua)){ 
   system.win = "Phone"; 
   system.winMobile = parseFloat(RegExp["$1"]); 
  } 
 } 
 
 // 检测IOS版本 
 if(system.mac && ua.indexOf("Mobile")> -1){ 
  if(/CPU (?:Phone )?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); 
 } 
 
 // 游戏系统 
 system.wii = ua.indexOf("Wii") > -1; 
 system.ps = /playstation/i.test(ua); 
 
 // 返回这些对象 
 return { 
  engine:  engine, 
  browser: browser, 
  system:  system   
 }; 
 
 // console.log(engine); 
 // console.log(browser); 
 // console.log(system); 
}();

以上这篇javascript浏览器用户代理检测脚本实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS对URL字符串进行编码/解码分析
Oct 25 Javascript
javascript中apply和call方法的作用及区别说明
Feb 14 Javascript
JavaScript的事件代理和委托实例分析
Mar 25 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
Apr 12 Javascript
jquery插件qrcode在线生成二维码
Apr 26 Javascript
JS仿淘宝实现的简单滑动门效果代码
Oct 14 Javascript
JS button按钮实现submit按钮提交效果
Nov 01 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
Dec 14 Javascript
微信小程序 Template详解及简单实例
Jan 05 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 Javascript
vue 设置proxyTable参数进行代理跨域
Apr 09 Javascript
在layui.use 中自定义 function 的正确方法
Sep 16 Javascript
vue中的event bus非父子组件通信解析
Oct 27 #Javascript
基于javascript中的typeof和类型判断(详解)
Oct 27 #Javascript
webpack配置之后端渲染详解
Oct 26 #Javascript
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 #jQuery
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
Oct 26 #Javascript
node文字生成图片的示例代码
Oct 26 #Javascript
vue-cli中打包图片路径错误的解决方法
Oct 26 #Javascript
You might like
PHP的基本常识小结
2013/07/05 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
php表单处理操作
2017/11/16 PHP
js查找父节点的简单方法
2008/06/28 Javascript
jquery 事件执行检测代码
2009/12/09 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
jQuery实现订单提交页发送短信功能前端处理方法
2016/07/04 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
Puppet的一些技巧
2018/09/17 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
python分数表示方式和写法
2019/06/26 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
下载官网python并安装的步骤详解
2019/10/12 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
百丽国际旗下购物网站:优购
2017/02/28 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
大整数数相乘的问题
2012/07/22 面试题
师范院校学生自荐信范文
2013/12/27 职场文书
秋季运动会活动方案
2014/02/05 职场文书
商超业务员岗位职责
2014/03/12 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
活动宣传稿范文
2015/07/23 职场文书
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript