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

以下是完整的用户代理字符串检测脚本,包括检测呈现引擎、平台、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浏览器用户代理检测脚本实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • BOM之navigator对象和用户代理检测

    前面的话 navigator对象现在已经成为识别客户端浏览器的事实标准,navigator对象是所有支持javascript的浏览器所共有的.本文将详细介绍navigator对象和用户代理检测 属性 与其他BOM对象的情况一样,每个浏览器中的navigator对象也都有一套自己的属性.下表列出了存在于所有浏览器中的属性和方法,以及支持它们的浏览器版本 属性                                              说明 appCodeName           

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

    检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移动设备和游戏系统 /** * Author: laixiangran. * Created by laixiangran on 2015/12/02. * 检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移动设备和游戏系统 * ******************************************************************** * 各版本浏览器在windows10.0下的用户代理字符串:

  • 使用javascript实现判断当前浏览器

    写了一个判断当前浏览器类型及版本的方法,只在IE 8/11 .谷歌 .360 浏览器(不完全)上测试过 希望大家提出意见 ;(function($, window, document,undefined){ if(!window.browser){ var userAgent = navigator.userAgent.toLowerCase(),uaMatch; window.browser = {} /** * 判断是否为ie */ function isIE(){ return ("Act

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

    以下是完整的用户代理字符串检测脚本,包括检测呈现引擎.平台.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:

  • 借助JavaScript脚本判断浏览器Flash Player信息的方法

    今天研究了点Flex技术,做了一个小的Demo,在测试时发现经常报错,网上一查发现是浏览器Flash Player版本较低造成(需要10及其以上的版本)的,对此总结了一下借助JavaScript脚本判断浏览器Flash Player信息的方法: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JavaScript判断浏

  • 浏览器调试动态js脚本的方法(图解)

    前两天拉取公司前端代码修改,发现在开发者工具的sources选项里边,居然没有列出来我要调试的js脚本,后来观察了一下,脚本是动态在页面里引入的,可能是因为这样所以不显示出来,但是如果不能断点调试,只靠打印日志真要把人累死了,效率太低,网络搜索试验了一下,有两种方式可以解决: 1.在脚本里边增加 //# sourceURL=xxxxxxxxx.js,名称自己命名,可以直接使用文件名,如下图: 然后在网页里打开包含这个js的页面,这样就在开发者工具里能够看到了,可以像普通js一样正常打断点并进行调

  • IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法

    本文实例讲述了IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法.分享给大家供大家参考,具体如下: 经常我们用表单提交东西,在提交后,浏览器会自动记录你输入的东西,下次你再输入的时候,可以重新选择,但是如果你是用IE的话,这里有一个BUG, 其他浏览器没有这个问题.当然首先你得设置IE 浏览器选项是可以记录表单数据的,然后写一段代码来测试. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> &

  • Selenium执行JavaScript脚本的方法示例

    JavaScript是运行在客户端(浏览器)和服务器端的脚本语言,允许将静态网页转换为交互式网页.可以通过 Python Selenium WebDriver 执行 JavaScript 语句,在Web页面中进行js交互.那么js能做的事,Selenium应该大部分也能做.WebDriver是模拟终端用户的交互,所以就不能点击不可见的元素,有时可见元素也不能点击.在这些情况下,我们就可以通过WebDriver 执行JavaScript来点击或者执行页面元素.本文将介绍如何使用 WebDriver

  • JavaScript中防止微信浏览器被整体拖动的方法

    在微信网页开发中,我使用的页面结构是在body下的container覆盖全屏,container下有个header和page的容器,page负责显示所有内容并实现滚动. 结构如图: 但是遇到了一个问题:在页面已经滚动到顶部时,继续往下拖动page容器,会将微信浏览器整体往下拖,漏出"该网页由XXX提供"的提示,然后在安卓下,影响并不大,但是在iphone下,就没那么简单了,经过测试,在苹果下,往下拖动后快速滑动页面中的page,page并不会滚动,上拖同样遇到了这个问题,非常影响体验.

  • javascript带回调函数的异步脚本载入方法实例分析

    本文实例讲述了javascript带回调函数的异步脚本载入方法.分享给大家供大家参考.具体实现方法如下: var Loader = function () { } Loader.prototype = { require: function (scripts, callback) { this.loadCount = 0; this.totalRequired = scripts.length; this.callback = callback; for (var i = 0; i < scri

  • javascript 浏览器类型和版本号检测代码(兼容多浏览器)

    javascript检测浏览器类型和版本号(兼容各浏览器) var uA = navigator.userAgent; var browserType = "unknown"; if (uA.indexOf("Opera") > -1) { browserType = "Opera"; } else if (uA.indexOf("Safari") > -1) { browserType = "Safar

  • 用JavaScript实现让浏览器停止载入页面的方法

    本想弄个判断页面载入时间,过长就不加载特效的JavaScript代码,不过还是有点缺陷,这里就记录下来吧. IE浏览器用document.execCommand("Stop"),Chrome和Firefox用window.stop()(顺便说下,这是JavaScript标准中定义的方法),写在一起就是下面的方式了: <html> <body> 这里可以显示 <script type="text/javascript"> if (w

  • javascript浏览器窗口之间传递数据的方法

    本文实例讲述了javascript浏览器窗口之间传递数据的方法.分享给大家供大家参考.具体分析如下: 摘要: 在项目开发中我们经常会遇到弹窗,有的是通过div模拟弹窗效果,有的是通过iframe,也有通过window自带的open函数打开一个新的窗口.今天给大家分享的是最后一种通过window.open()函数打开页面进行数据交互.首先看下效果图: 原理: 父窗口给子窗口传递数据是通过url的参数传递过去,子窗口给父窗口传递数据是通过父窗口的全局函数传递. 代码: index.html如下: 复

随机推荐