基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统


Posted in Javascript onDecember 03, 2015

废话不多说了,直接给大家贴js代码了,代码附有注释,感兴趣的朋友一起学习吧。

/**
 * Author: laixiangran.
 * Created by laixiangran on 2015/12/02.
 * 检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
 * ********************************************************************
 * 各版本浏览器在windows10.0下的用户代理字符串:
 * Google Chrome 45.0.2454.85 —— "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36"
 * Opera 31.0.1889.174 —— "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174"
 * Microsoft Edge —— "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240"
 * Firefox 40.0.3 —— "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"
 * Internet Explorer 11+ —— "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko"
 * Internet Explorer 10- —— "Mozilla/5.0 (compatible; MSIE x.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)"
 */
(function(){
 window.iClient = {};
 //呈现引擎信息
 var engine = {
 //呈现引擎
 ie: 0,
 gecko: 0,
 webkit: 0,
 khtml: 0,
 opera:0,
 //具体版本号
 ver: null
 };
 var browser = {
 //浏览器
 ie: 0,
 edge: 0,
 firefox: 0,
 safari: 0,
 konq: 0,
 opera: 0,
 chrome: 0,
 //具体版本号
 ver: null
 };
 //平台、设备和操作系统
 var system = {
 win: false,
 mac: false,
 unix: false,
 //移动设备
 iphone: false,
 ipod: false,
 ipad: false,
 ios: false,
 android: false,
 nokiaN: false,
 winMobile: false,
 //游戏系统
 wii: false, //任天堂
 ps: false //Playstation3
 };
 //获取浏览器的用户代理字符串
 var ua = window.navigator.userAgent;
 //检测呈现引擎和浏览器
 //检测Presto内核的Opera浏览器
 if(window.opera){
 engine.ver = browser.ver = window.opera.version();
 engine.opera = browser.opera = parseFloat(engine.ver);
 }
 //检测WebKit 用代理字符串中的"AppleWebKit"进行检测
 else if(/AppleWebKit\/(\S+)/.test(ua)){
 engine.ver = RegExp["$1"];
 engine.webkit = parseFloat(engine.ver);
 //确定Microsoft Edge
 if(/Edge\/(\S+)/.test(ua)){
  browser.ver = RegExp["$1"];
  browser.edge = parseFloat(browser.ver);
 }
 //确定WebKit内核Opera
 else if(/OPR\/(\S+)/.test(ua)){
  browser.ver = RegExp["$1"];
  browser.opera = parseFloat(browser.ver);
 }
 //确定Chrome
 else if(/Chrome\/(\S+)/.test(ua)){
  browser.ver = RegExp["$1"];
  browser.chrome = parseFloat(browser.ver);
 }
 //确定Safari
 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.ver = browser.safari = safariVersion;
 }
 }
 //检测KHTML 用于Konqueror3.1及更早版本中不包含KHTML的版本,故而就要使用Konqueror的版本来代替
 else if(/KHTML\/(\S+)/.test(ua) || /Konqueror\/(\S+)/.test(ua)){
 engine.ver = browser.ver = RegExp["$1"];
 engine.khtml = browser.konq = parseFloat(engine.ver);s
 }
 //检测Gecko 其版本号在字符串"rv:"的后面
 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);
 }
 }
 //检测IE
 else if(/MSIE ([^;]+)/.test(ua) || /rv:([^\)]+)\) like Gecko/.test(ua)){
 engine.ver = browser.ver = RegExp["$1"];
 engine.ie = browser.ie = parseFloat(engine.ver);
 }
 //获取平台或者操作系统信息,可能的值:win32、win64、MacPPC、MacIntel、Xll、Linux i686
 var p = window.navigator.platform;
 //检测平台
 system.win = p.indexOf("Win") == 0;
 system.mac = p.indexOf("Mac") == 0;
 system.unix = (p == "Xll'") || (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 "7":
   system.win = "7";
   break;
   case "8":
   system.win = "8";
   break;
   case "8.1":
   system.win = "8.1";
   break;
   case "10.0":
   system.win = "10.0";
   break;
   default:
   system.win = "NT";
   break;
  }
  }
 }
 }
 //移动设备
 system.iphone = ua.indexOf("iPhone") > -1;
 system.ipod = ua.indexOf("iPod") > -1;
 system.ipad = ua.indexOf("iPad") > -1;
 system.nokiaN = ua.indexOf("NokiaN") > -1;
 //window 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 (?:iPhone )?OS (\d+.\d+)/.test(ua)){
  system.ios = parseFloat(RegExp["$1"].replace("_","."));
 }else{
  system.ios = 2; //不能真正检测出来,所以只能猜测
 }
 }
 //检测安卓版本
 if(/Android (\d+.\d+)/.test(ua)){
 system.android = parseFloat(RegExp["$1"]);
 }
 //检测游戏系统
 system.wii = ua.indexOf("wii") > -1;
 system.ps = /playstation/i.test(ua);
 window.iClient.engine = engine;
 window.iClient.browser = browser;
 window.iClient.system = system;
})();

以上内容是小编给大家分享的基于javascript实现检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统的全部叙述,希望大家喜欢。下面文章给大家介绍JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备),敬请关注。!

Javascript 相关文章推荐
js innerHTML 的一些问题的解决方法
Jun 22 Javascript
Javascript日期对象的dateAdd与dateDiff方法
Nov 18 Javascript
基于MooTools的很有创意的滚动条时钟动画
Nov 14 Javascript
浅析Cookie中的Path与domain
Dec 18 Javascript
使用jQuery动态加载js脚本文件的方法
Apr 03 Javascript
js正则表达式注册页面表单验证
Oct 11 Javascript
JS批量替换内容中关键词为超链接
Feb 20 Javascript
基于Node的React图片上传组件实现实例代码
May 10 Javascript
JS中Object对象的原型概念基础
Jan 29 Javascript
Vue不能检测到Object/Array更新的情况的解决
Jun 26 Javascript
JQuery实现ajax请求的示例和注意事项
Dec 10 jQuery
Angular进行简单单元测试的实现方法实例
Aug 16 Javascript
学习JavaScript设计模式(代理模式)
Dec 03 #Javascript
全面解析Bootstrap图片轮播效果
Dec 03 #Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
Dec 03 #Javascript
解决JavaScript数字精度丢失问题的方法
Dec 03 #Javascript
Javascript实现检测客户端类型代码封包
Dec 03 #Javascript
javascript学习小结之prototype
Dec 03 #Javascript
简单实现JS对dom操作封装
Dec 02 #Javascript
You might like
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
python通过ElementTree操作XML获取结点读取属性美化XML
2013/12/02 Python
python模块之time模块(实例讲解)
2017/09/13 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
优秀大学生推荐信范文
2013/11/28 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
讲文明倡议书
2015/04/29 职场文书
亮剑观后感
2015/06/05 职场文书
罗马假日观后感
2015/06/08 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
详解redis在微服务领域的贡献
2021/10/16 Redis