Javascript实现检测客户端类型代码封包


Posted in Javascript onDecember 03, 2015

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

/**
 * 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;
})();

再给大家一个简单点的实例:判断windows、linux、android

<html>
<head>
<title>判断操作系统</title>
<script type="text/javascript">
function detectOS() { 
var sUserAgent = navigator.userAgent; 

var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows"); 
var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC") || (navigator.platform == "Macintosh") || (navigator.platform == "MacIntel"); 
if (isMac) return "Mac"; 
var isUnix = (navigator.platform == "X11") && !isWin && !isMac; 
if (isUnix) return "Unix"; 
var isLinux = (String(navigator.platform).indexOf("Linux") > -1); 

var bIsAndroid = sUserAgent.toLowerCase().match(/android/i) == "android";
if (isLinux) {
if(bIsAndroid) return "Android";
else return "Linux"; 
}
if (isWin) { 
var isWin2K = sUserAgent.indexOf("Windows NT 5.0") > -1 || sUserAgent.indexOf("Windows 2000") > -1; 
if (isWin2K) return "Win2000"; 
var isWinXP = sUserAgent.indexOf("Windows NT 5.1") > -1 || 
sUserAgent.indexOf("Windows XP") > -1; 
if (isWinXP) return "WinXP"; 
var isWin2003 = sUserAgent.indexOf("Windows NT 5.2") > -1 || sUserAgent.indexOf("Windows 2003") > -1; 
if (isWin2003) return "Win2003"; 
var isWinVista= sUserAgent.indexOf("Windows NT 6.0") > -1 || sUserAgent.indexOf("Windows Vista") > -1; 
if (isWinVista) return "WinVista"; 
var isWin7 = sUserAgent.indexOf("Windows NT 6.1") > -1 || sUserAgent.indexOf("Windows 7") > -1; 
if (isWin7) return "Win7"; 
} 
return "other"; 
} 
document.writeln("您的操作系统是:" + detectOS()); 
alert(detectOS());
</script>
</head>
<body>
</body>
</html>
Javascript 相关文章推荐
网页javascript精华代码集
Jan 24 Javascript
基于jQuery的message插件实现右下角弹出消息框
Jan 11 Javascript
window.navigate 与 window.location.href 的使用区别介绍
Sep 21 Javascript
javascript基于HTML5 canvas制作画箭头组件
Jun 25 Javascript
jQuery unbind()方法实例详解
Jan 19 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
Jun 12 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
Aug 17 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
Sep 01 Javascript
浅谈JS中String()与 .toString()的区别
Oct 20 Javascript
react.js 获取真实的DOM节点实例(必看)
Apr 17 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
Jul 20 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 Javascript
javascript学习小结之prototype
Dec 03 #Javascript
简单实现JS对dom操作封装
Dec 02 #Javascript
jQuery实现获取绑定自定义事件元素的方法
Dec 02 #Javascript
JS折半插入排序算法实例
Dec 02 #Javascript
如何动态加载外部Javascript文件
Dec 02 #Javascript
javascript实现获取浏览器版本、浏览器类型
Dec 02 #Javascript
JavaScript如何禁止Backspace键
Dec 02 #Javascript
You might like
PHP中的超全局变量
2006/10/09 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
php自定义函数实现二维数组排序功能
2016/07/20 PHP
Opacity.js
2007/01/22 Javascript
网页javascript精华代码集
2007/01/24 Javascript
nodejs项目windows下开机自启动的方法
2017/11/22 NodeJs
解决vue v-for src 图片路径问题 404
2019/11/12 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
Python命名空间详解
2014/08/18 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
Django实现学员管理系统
2019/02/26 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
JENNIFER BEHR官网:各种耳环和发饰
2020/06/07 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
应用英语专业自荐信
2014/01/26 职场文书
草船借箭教学反思
2014/02/03 职场文书
课程改革实施方案
2014/03/16 职场文书
八年级作文之友情
2019/11/25 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
基于Python实现一个春节倒计时脚本
2022/01/22 Python
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL