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动态调整iframe高度的方法
Mar 06 Javascript
jQuery EasyUI API 中文文档 搜索框
Sep 29 Javascript
点击button获取text内容并改变样式的js实现
Sep 09 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
Sep 24 Javascript
Bootstrap select下拉联动(jQuery cxselect)
Jan 04 Javascript
浅谈JavaScript中的属性:如何遍历属性
Sep 14 Javascript
Vue引入sass并配置全局变量的方法
Jun 27 Javascript
React中如何引入Angular组件详解
Aug 09 Javascript
微信小程序实现顶部下拉菜单栏
Nov 04 Javascript
setTimeout与setInterval的区别浅析
Mar 23 Javascript
JS根据json数组多个字段排序及json数组常用操作
Jun 06 Javascript
js实现简单的倒计时
Jan 28 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
一次编写,随处运行
2006/10/09 PHP
php5.2.0内存管理改进
2007/01/22 PHP
PHP curl 并发最佳实践代码分享
2012/09/05 PHP
smarty简单分页的实现方法
2014/10/27 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
js 函数的副作用分析
2011/08/23 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
详解vue axios中文文档
2017/09/12 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
Python内置数据类型详解
2014/08/18 Python
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
浅析python打包工具distutils、setuptools
2018/04/20 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
心理健康心得体会
2014/01/02 职场文书
分公司负责人任命书
2014/06/04 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
Golang的继承模拟实例
2021/06/30 Golang
基于Redission的分布式锁实战
2022/08/14 Redis