首页 > 网站 > WEB开发 > 正文

用户代理检测与浏览器Ua详细分析

2024-04-27 14:14:39
字体:
来源:转载
供稿:网友

用户代理检测与浏览器Ua详细分析

.
  • 首页
  • 博客园
  • 联系我
  • 前言:用户代理字符串与用户代理检测.
  • 先看结论/可用代码.
  • 浏览器市场份额现状.
  • Mozilla Firefox.
  • Microsoft Internet Explorer.
  • Google Chrome.
  • Apple Safari.
  • Opera.
  • 呈现引擎(浏览器内核).
  • 国产浏览器.
  • 判断操作系统.
  • 随笔感想.
  • 留言评论
  • 返回顶部

前言:用户代理字符串与用户代理检测

“用户代理字符串”(User Agent,下文简称“Ua”)是浏览器用来标识自身信息的一串字符

现如今,Ua一般包含有浏览器品牌、版本、内核、所在操作系统环境等信息

它也有着“悠久”而混乱的历史

若您对这段“黑历史”感兴趣

推荐阅读Hejin.Wong《用户代理字符串简史》一文,本文不再赘述

而“用户代理检测”则是通过检测Ua来确定实际使用的浏览器及其内核等信息

本文将从浏览器内核和浏览器本身的角度出发

通过亲测用户代理字符串,梳理各主流浏览器(本文仅限桌面端)内核、版本等信息

以及分享通过javaScript进行用户代理检测的方法

注:本文代码基于[美]Nicholas C.Zakas《Javascript高级程序设计(第3版)》,并已根据现实情况进行优化

先看结论/可用代码

通过在JavaScript中引用以下代码

即可在需要的时候方便的测出用户所用浏览器的用户代理字符串、浏览器品牌、版本、内核等信息

var client=function(){   var engine={    //呈现引擎      trident:0,      gecko:0,      webkit:0,      khtml:0,      PResto: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   };   var ua=navigator.userAgent;   if(/AppleWebKit//(/S+)/.test(ua)){        //匹配Webkit内核浏览器(Chrome、Safari、新Opera)      engine.ver=RegExp["$1"];      engine.webkit=parseFloat(engine.ver);      if(/OPR//(/S+)/.test(ua)){             //确定是不是引用了Webkit内核的Opera         browser.ver=RegExp["$1"];         browser.opera=parseFloat(browser.ver);      }else if(/Chrome//(/S+)/.test(ua)){    //确定是不是Chrome         browser.ver=RegExp["$1"];         browser.chrome=parseFloat(browser.ver);      }else if(/Version//(/S+)/.test(ua)){   //确定是不是高版本(3+)的Safari         browser.ver=RegExp["$1"];         browser.safari=parseFloat(browser.ver);      }else{                                 //近似地确定低版本Safafi版本号         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(window.opera){                 //只匹配拥有Presto内核的老版本Opera 5+(12.15-)      engine.ver=browser.ver=window.opera.version();      engine.presto=browser.opera=parseFloat(engine.ver);   }else if(/Opera[///s](/S+)/.test(ua)){  //匹配不支持window.opera的Opera 5-或伪装的Opera      engine.ver=browser.ver=RegExp["$1"];      engine.presto=browser.opera=parseFloat(engine.ver);   }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)){ //判断是不是基于Gecko内核      engine.ver=RegExp["$1"];      engine.gecko=parseFloat(engine.ver);      if(/Firefox//(/S+)/.test(ua)){                //确定是不是Firefox         browser.ver=RegExp["$1"];         browser.firefox=parseFloat(browser.ver);      }   }else if(/Trident//([/d/.]+)/.test(ua)){         //确定是否是Trident内核的浏览器(IE8+)      engine.ver=RegExp["$1"];      engine.trident=parseFloat(engine.ver);      if(/rv/:([/d/.]+)/.test(ua)||/MSIE ([^;]+)/.test(ua)){   //匹配IE8-11+         browser.ver=RegExp["$1"];         browser.ie=parseFloat(browser.ver);      }   }else if(/MSIE ([^;]+)/.test(ua)){               //匹配IE6、IE7      browser.ver=RegExp["$1"];      browser.ie=parseFloat(browser.ver);      engine.ver=browser.ie-4.0;                    //模拟IE6、IE7中的Trident值      engine.trident=parseFloat(engine.ver);   }   var p=navigator.platform;                        //判断操作系统   system.win=p.indexOf("Win")==0;   system.mac=p.indexOf("Mac")==0;   system.x11=(p.indexOf("X11")==0)||(p.indexOf("linux")==0);   if(system.win){      if(/Win(?:dows )?([^do]{2})/s?(/d+/./d+)?/.test(ua)){         if(RegExp["$1"]=="NT"){            system.win = ({               "5.0" : "2000",               "5.1" : "XP",               "6.0" : "Vista",               "6.1" : "7",               "6.2" : "8",               "6.3" : "8.1",               "10" : "10"            })[RegExp["$2"]] || "NT";         }else if(RegExp["$1"]=="9x"){            system.win="ME";         }else{            system.win=RegExp["$1"];         }      }   }   return {      ua:ua,          //用户浏览器Ua原文      engine:engine,  //包含着用户浏览器引擎(内核)信息      browser:browser,//包括用户浏览器品牌与版本信息      system:system   //用户所用操作系统及版本信息   };}();

[2015/01/16注:以上代码测试并吸收了本文评论中@luobotang的建议,感谢反馈]

以上代码封装了一个命名为client的函数对象

实际开发中,引用了上述代码后,可以如下面示例代码所示,灵活运用client对象中的信息

if(client.engine.webkit){ //如果是基于Webkit内核的浏览器   if(client.browser.chrome){    //若是Google Chrome浏览器      //执行针对Chrome的代码   } else if {client.browser.safari}{      //执行针对Safari的代码   }} else if (client.engine.gecko){ //若是基于Cecko内核的浏览器   if(client.browser.firefox){      //执行针对Firefox的代码   } else {      //执行针对其他基于Gecko内核的浏览器的代码   }}

下文将会使用以下代码alert出Ua等信息作为测试参考并提供截图(点击截图可放大查看)

若您需要亲测任何浏览器的信息,可将以下代码粘贴于上文第一段代码(client对象)后并在浏览器中运行

alert(client.ua);var browserName="";             //保存当前使用的浏览器品牌信息var browserVer=0;               //保存当前使用的浏览器版本信息for(var i in client.browser){   if(client.browser[i]){      browserName=i;      browserVer=client.browser[i];      break;   }}var useEngine="";               //保存当前浏览器引擎(内核)名称var engineVer=0;                //保存当前使用的浏览器引擎版本for(var i in client.engine){   if(client.engine[i]){      useEngine=i;      engineVer=client.engine[i];      break;   }}var useSystem="";               //保存当前操作系统信息for(var i in client.system){   if(client.system[i]){      i== "win"?useSystem = "Windows "+client.system[i]:useSystem=i;      break;   }}alert( "当前使用的浏览器:"+browserName     + "/n浏览器版本:"+browserVer     + "/n浏览器内核:"+useEngine     + "/n内核版本:"+engineVer     + "/n当前操作系统:"+useSystem);

浏览器市场份额现状

首先通过数据了解一下目前浏览器市场份额现状

根据“百度统计|流量研究院”的数据

下图/表是2014年全年国内浏览器市场份额情况

浏览器名称市场份额
.Internet Explorer50.03%
.Google Chrome27.73%
.搜狗高速浏览器4.77%
.猎豹浏览器2.46%
.QQ浏览器2.19%
.2345浏览器1.67%
.其它11.15%

由此可以看出,在国内,IE浏览器占据了“大半江山”

紧随其后的是Google Chrome浏览器

排在第3、4、5、6位的均是国产壳浏览器

再看一下2014年11月全球浏览器市场份额情况(数据来自“浏览迷”)

浏览器名称市场份额
.Internet Explorer58.94%
.Google Chrome20.57%
.Firefox13.26%
.Safari5.9%
.Opera0.88%
.其它0.45%

从全世界的范围上看,IE浏览器的市场份额更加可观,达到近6成

这些数据对于分析浏览器内核、生产兼容性强的前端项目具有重要的参考意义

Mozilla Firefox

Mozilla Firefox(火狐)是我个人最为崇敬的浏览器品牌

相比较而言,火狐浏览器性能优越、坚持标准、勇于尝试(......好了,真心的,这可不是植入广告)

它更拥有独立的呈现引擎(内核)Gecko /?gek??/

以下是我亲测整理的火狐浏览器各主要版本Ua及通过Ua解析出的信息(点击缩略图可放大查看)

Mozilla Firefox 1.0firefox1Uafirefox1Mozilla/5.0 (Windows: U; Windows NT 5.1; zh-CN; rv:1.7.5) Gecko/20041124 Firefox/1.0Mozilla Firefox 3.6firefox3.6Ua

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表