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 相关文章推荐
Jquery 快速构建可拖曳的购物车DragDrop
Nov 30 Javascript
JS实现网页滚动条感应鼠标变色的方法
Feb 26 Javascript
究竟什么是Node.js?Node.js有什么好处?
May 29 Javascript
jQuery原理系列-常用Dom操作详解
Jun 07 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
Sep 01 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
Nov 23 Javascript
vue-resourse将json数据输出实例
Mar 08 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
Apr 10 Javascript
ionic2.0双击返回键退出应用
Sep 17 Javascript
layer页面跳转,获取html子节点元素的值方法
Sep 27 Javascript
JavaScript实现点击图片换背景
Nov 20 Javascript
TS 类型兼容教程示例详解
Sep 23 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
js有序数组的连接问题
2013/10/01 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
angularjs2中父子组件的数据传递的实例代码
2017/07/05 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
vue+element 模态框表格形式的可编辑表单实现
2019/06/07 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
Python中decorator使用实例
2015/04/14 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
实体的生命周期
2013/08/31 面试题
六一儿童节活动策划方案
2014/01/27 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书
goland设置颜色和字体的操作
2021/05/05 Golang
JavaScript流程控制(分支)
2021/12/06 Javascript