如何检测现在主流的几大浏览器?

在客户端中,浏览器最重要的检测对象是navigator对象,包括检测浏览器的名称,版本号和平台等。

一:检测浏览器有哪些方式?

目前主要有两种方式:user-Agent字符串检测法和对象/特征检测法。

对象/特征检测法:主要是检测浏览器具有哪些能力,而不是特定的浏览器的版本号,名称。比如:判断浏览器是否支持DOM,则可以使用该检测方法。

if(document.getElementById)
{
   alert("支持DOM");
}
else
{
   alert("不支持DOM");
}

注意:如果检查函数是否存在,不能加入括号,因为如果加入括号,浏览器就会尝试调用该函数,如果该函数不存在,则会出现错误。

比如下面的列子:

if(test)-----test为函数名
{
   console.log("111");
}
else
{
   console.log("222");
}

user-Agent字符串检测法:提供关于WEB浏览器的大量信息,包括版本号和名称等,应用比较广泛,像在网站流量统计,网站中访客使用的浏览器和操作系统等应用的比较多。

var suserAgent=navigator.userAgent;  //我使用的是FIREFOX,输出为:Mozilla/5.0 (Windows NT 6.1; rv:46.0) Gecko/20100101 Firefox/46.0var suserVersion=navigator.appVersion  //输出为5.0

二:user-Agent(用户代理)的格式

navigator对象最早始于netScape Navigator 2.0和IE3.0;NetScape 引擎开发的代号为Mozilla.

IE和NetScape的格式  

1.netScape Navigator 3.0

格式为:Mozilla/AppVersion(platform,Secrity[;os-or-cpu-description])

比如win95在netScape Navigator 3.0 上运行后为:Mozilla/3.0(win95;I)

I表示安全性较低,N表示没有安全性,U表示强128位加密安全性。

2.IE3.0

格式为:Mozilla/2.0(compatible,MSIE [IEversion];os)--compatible表示兼容的。

IE是3.0,而后面Mozilla/2.0有坑,造成user-Agent混淆

比如win95在IE3.02运行后为:Mozilla/2.0(compatible;MSIE 3.0;windows 95)

   //因此混淆带来的影响是:检测浏览器IE3.0和操作系统的算法变得更加繁琐。   检测IE变为:    if(navigator.userAgent.indexOf(‘MSIE ‘)>-1)    {         //检测为3.0或更高版本         if(navigator.userAgent.indexOf(‘3.‘)>-1){alert("检测IE3.0版本浏览器")}    }    else if(parseFloat(navigator.appVersion)>=3)    {         alert("检测非IE3.0版本的浏览器")    }   //如果没有混淆,只用一个算法,便能检测3.0版本的浏览器    if(parseFloat(navigator.appVersion)>=3)    {         alert("检测到所有为3.0版本的浏览器")    }

因此如果Mozilla和IE的版本不对应,都要单独检测IE。其它的这里都不再讲述了,大家知道就行。

3:现在基本两者都保持一致。

格式为:Mozilla/MozillaVersion(platform,security,os-or-cpu;localization information;prereleaseVersion) Gecko/Geckoversion   ApplicationProduct/ApplicationProductVersion

下面一一解释各个的含义:

MozillaVersion--MozillaVersion的版本

platform-----------操作系统类型,包括WINdows,Mac,Unix

security-----------可为I N U

os-or-cpu---------windows系统下:winNT/win95 ;Mac系统下:代表cpu类型,为68k/ppc  ;Unix系统下:从uname-sm中获得

localization information-------浏览器使用的语言,典型的为美国的en-US

prereleaseVersion--------用于这个浏览器的开放源代码的Mozilla代码的基础版本。

Geckoversion   ----使用Gecko渲染引擎的版本,这里按照yyyymmdd的日期

ApplicationProduct---------使用Mozilla代码的品牌浏览器的名称。

ApplicationProductVersion-----使用Mozilla代码的品牌浏览器的名称的版本。

比如:Mozilla/5.0 (Windows ;u;Windows NT 6.1; en-US;rv:46.0) Gecko/20100101 Firefox/46.0

Opera的格式  

           格式:Opera/AppVersion(os,security)[language]

比如:Opera/7.54(windows NT 5.1,u)[en]

Opera用一个独特的user-Agent来表示确定它的web浏览器,但正是因为它的独特性,它可以伪装成IE和Mozilla的某种版本。

因此这就造成了需要针对出现的不同版本,判断属于何种浏览器。

1.当opera伪装成Mozilla 5.0时,返回的user-Agent为:

Mozilla/5.0 (windows NT 5.1;U)opera 7.54

2.当opera伪装成IE6.0时,返回的user-Agent为:

Mozilla/4.0 (compatible;MSIE 6.0;windows NT 5.1)opera 7.54---出现了compatible,MSIE 相当于opera模拟了IE的字符串

Safari的格式 

           safari是apple自己推出的浏览器,基于Khtml的开源项目。

格式:Mozilla/5.0(platform,security,os-or-cpu;language) Applewebkit/ApplewebkitVersion(kHTML,like Gecko )safari/safariVersion

比如:Mozilla/5.0(MAC,U,PPC MAC os x;en) Applewebkit/124(kHTML,like Gecko )safari/125.1

---safari和Mozilla是兼容的
三:由于浏览器,对应升级着不同的版本,因此最好的检测方法就是检测最小版本。

比如:

if(isIE5||isIE6||isIE7||isIE8)
{
   //要做的事
}
//只需要直接检测最小版本的即可
if(isMinIE5)
{
   //要做的事
}

四:如何检测Opera?

首先我们封装一个函数,一会后面要用到。主要是比较版本的值。

 var suerAgent=navigator.userAgent;//保存user-Agent信息 var fAppVersion=navigator.appVersion; //保存版本号function compareVersion(sVersion1,sVersion2)
{
  //将版本拆分
   var aVersion1=sVersion1.split(‘.‘);
   var aVersion2=sVersion2.split(‘.‘);
  //如果版本长度不一致,则在较短的版本后面补0
  if(aVersion1.length>aVersion2.length)
  {
      for(var i=0;i<aVersion1.length-aVersion2.length;i++)
      {
         aVersion2.push(‘0‘);
      }
  }
  else if(aVersion1.length<aVersion2.length)
  {
       for(var i=0;i<aVersion1.length-aVersion2.length;i++)
      {
         aVersion1.push(‘0‘);
      }
  }
  //现在两个不同版本的位数相等,比较版本各个位数的大小。
  for(var i=0;i<aVersion1.length;i++)
  {
     var var1=parseInt(aVersion1[i],10);
     var var2=parseInt(aVersion2[i],10);
     if(var1<var2){return -1;}//前者小于后者
     else if(var1>var2){return 1;}//前者大于后者
  }
  return 0;//两者相等
}
console.log(compareVersion("1.3.4","2.3"));
console.log(compareVersion("1.13.2","1.3"));
console.log(compareVersion("3.4","3.4"));

1.首先我们分析一下,opera的user-Agent中每一个都含有opera,因此最简单的方法就是检查是否含有字符opera。

var  isOpera=suerAgent.indexOf("Opera")>-1;(得到的为bool值

2.由于opera含有不同的版本,这里可以声明几个变量,用来测试不同版本的opera

var isMinOpera4=isMinOpera5=isMinOpera6=isMinOpera7=false  //每个变量都设为false,保证如果浏览器为非Opera时,能正确返回false

3.由于opera有伪装,所以有两种方法来确定浏览器的版本。

  如果为自身的user-Agent:

if(isOpera)
{
   var  selfOperaVersion=null;
   if(navigator.appName=="Opera")
  {
        selfOperaVersion=fAppVersion;(fAppVersion为保存的版本号)
  }
}

如果使用了伪装的user-Agent:

//下面我们来看一下,应该如何抽取?var  popOperaVersion=new RegExp("opera(\\d+\\.\\d+)");//注意这里用的是new RegExp()的方法,需要对\d和\.进行双重转义。

所以综上两种情况,我们将代码整理下如下:

if(isOpera)
{
    var selfOperaVersion=null;     if(navigator.appName=="Opera")    {        selfOperaVersion=fAppVersion;(fAppVersion为保存的版本号)    }   else    {     var popOperaVersion=new RegExp("opera(\\d+\\.\\d+)");     popOperaVersion.test(suerAgent);     selfOperaVersion=parseFloat(RegExp["$1"]);//版本号存储在RegExp["$1"]中   }  //检测一下分别是什么版本的opera   console.log((isMinOpera4=selfOperaVersion)>=4);   console.log((isMinOpera5=selfOperaVersion)>=5);
}

五:如何检测safari?

首先了解到Konqueror和safari都是基于KHTML,那么我们查看一下它的user-Agent字符:

Mozilla/5.0(compatible;konqueror/2.2.2;sunos)

Mozilla/5.0(compatible;konqueror/3.2;freeBSD)(KHTML,like Gecko)

Mozilla/5.0(Mac;u;ppc mac os x;en)Applewebkit/51(like Gecko) safari/51

暂列出上面三种典型的user-Agent,那么可以分析到safari中需要查找konqueror,Applewebkit,KHTML中的字符

    检测代码如下,这里不再详细讲述,同opera的类似:

var isKHTML = suerAgent.indexOf("KHTML")>-1||suerAgent.indexOf("konqueror")>-1||suerAgent.indexOf("Applewebkit")>-1;var isMinSafari1=isMinSafari2=false;var isKonq2_2=isKonq3=isKonq3_1=isKonq3_2=false;if(isKHTML){   //判断使用的是何种KHTML?只有两种,一种是safari,一种是konqueror   isSafari=suerAgent.indexOf(‘Applewebkit‘)>-1;   isKonq=suerAgent.indexOf(‘Applewebkit‘)>-1;   if(isSafari)   {      //设置正则表达式       var  popAppWebkit=new RegExp("Applewebkit\\/(\\d+(?:\\.\\d*)?)");//版本可以有小数,但不全是       popAppWebkit.test(suerAgent);       var  selfAPPVersion=parseFloat(RegExp["$1"]);       console.log((isMinSafari1=selfAPPVersion)>=85);       console.log((isMinSafari1=selfAPPVersion)>=124);   }  else if(isKonq)  {      //设置正则表达式        var  popAppWebkit=new RegExp("konqueror\\/(\\d+(?:\\.\\d+(?:\\.\\d)?)?)");      popAppWebkit.test(suerAgent);       console.log((isKonq2_2=compareVersion(RegExp["$1"],"2.2"))>=0);       console.log((isKonq3=compareVersion(RegExp["$1"],"3.0"))>=0);       console.log((isKonq3_1=compareVersion(RegExp["$1"],"3.1"))>=0);       console.log((isKonq3_2=compareVersion(RegExp["$1"],"3.2"))>=0);  }}

六:如何检测IE?

先看一下IE的user-Agent的格式:Mozilla/4.0(compatible;MSIE 6.0;windows NT)

那么主要检测compatible和MSIE 这两个字符即可。

代码如下:

      var isIE=suserAgent.indexOf("compatible")>-1&&suserAgent.indexOf("MSIE ")>-1&&!isOpera;
      var isMinIE4=isMinIE5=isMinIE5_5=isMinIE6=false;
      if(isIE)
     {
          var  reIE=new RegExp("MSIE(\\d+\\.\\d+)");
          reIE.test(suerAgent);
          var selfAPPVersion=parseInt(RegExp["$1"]);
          console.log((isMinIE4=selfAPPVersion)>=4);
          console.log((isMinIE5=selfAPPVersion)>=4);
          console.log((isMinIE5_5=selfAPPVersion)>=4);
     }

七:如何检测Mozilla?

先来看下格式:Mozilla/5.0 (Windows NT 6.1; rv:46.0) Gecko/20100101 Firefox/46.0,注意要考虑opera的伪装以及Safari中出现的like Gecko。

代码如下:

      var isMozilla=suerAgent.indexOf("Gecko")>-1&&!isKHTML;
      var  isMinMoz1=isMinMoz1_4=isMinMoz1_5=false;
      if(isMozilla)
     {

          var  reMozilla=new RegExp("rv:(\\d+\\.\\d+(?:\\.\\d+)?)");
          reMozilla.test(suerAgent);
          var selfAPPVersion=parseFloat(RegExp["$1"]);
          console.log((isMinMoz1=compareVersion(RegExp["$1"]),"1.0")>=0);
          console.log((isMinMoz1_4=compareVersion(RegExp["$1"]),"1.4")>=0);
          console.log((isMinMoz1_5=compareVersion(RegExp["$1"]),"1.5")>=0);
     }

到此以上,所有的浏览器的检测均已完成。

时间: 2024-10-26 03:11:00

如何检测现在主流的几大浏览器?的相关文章

DOM(十四):代理检测和事件处理(跨浏览器)

一.检测 用于用户代理检测,检测范围包括浏览器引擎.平台.Windows.移动设备和游戏系统等 /* *用户代理检测脚本,检测范围包括浏览器引擎.平台.Windows.移动设备和游戏系统 */ var client = function() { //呈现引擎 var engine = { ie:0, //ie gecko:0, //火狐 webkit:0, //chrome和safari khtml:0, //Linux下的Konqueror opera:0, //opera ver:null

检测 HTML5\CSS3\JAVASCRIPT 在浏览器的适应情况

CSS3 Selectors Test : 这是CSS3.INFO网站提供的css选择器测试页面,它能够详细显示当前浏览器对所有CSS3选择器的支持情况.启动测试,浏览器会自动测验,并已列表的方式显示当前浏览器对所有css3选择器的支持情况     http://tools.CSS3.info/selectors-test/test.html When can I use :这是一个专业的测试网站,为广大网页设计师提供CSS3\HTML5\SVG\JAVAScript api 技术的浏览器支持情

【转】 运动目标检测跟踪主流算法

不全,需要慢慢补充 一.运动目标检测 (一)背景差 1.帧差 2.GMM 等 背景减算法可以对背景的光照变化.噪声干扰以及周期性运动等进行建模,在各种不同情况下它都可以准确地检测出运动目标.因此对于固定摄像头的情形,目前大多数的跟踪算法中都采用背景减算法来进行目标检测.背景减算法的局限性在于它需要一个静态的固定摄像头. (二)运动场 光流法 光流估计的方法都是基于以下假设:图像灰度分布的变化完全是目标或者场景的运动引起的,也就是说,目标与场景的灰度不随时间变化.这使得光流方法抗噪声能力较差,其应

目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto

“浏览器内核”主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息.不同的浏览器内核对网页编写语法的解析也有所不同,因此同一网页在不同的内核浏览器里的渲染.展示效果也可能不同.     一.Trident内核(代表:Internet Explorer) .      Trident(又称为MSHTML),是微软开发

几大浏览器关闭页面的方法

今天需要做一个功能,倒计时5s关闭页面,或者直接点击按钮直接关闭页面.开始以为是一个很简单的功能,做的时候还是遇到问题了. 1.1  关闭页面的方法 问题是这样的:开始用的 window.close()方法关闭页面,在IE中测试没有问题. 到了谷歌发现页面并没有关闭,F12打开提示:Scripts may closed only the windows that were opened by it. 大致意思:脚本不能关闭非脚本打开的页面. 后来找到一个折中的办法: 将当期的页面指向blank来

[原创]一个纯css实现兼容各种主流移动pc浏览器的时间轴

废话不多说 Demo 高度完全的自适应 中心思想是table 和第二列行高的50%的上下绝对定位竖线 第一次用codepen less完全不能用啊 连node png之类的都是关键词会被去掉... 马克一个介绍Codepen简介 我总在想无论是画画还是写代码 思考这个东西的本身的结构组成原理(无论是时间轴还是人体) 比照着葫芦画瓢或者死记硬背一些东西重要的多 嗯! 私心表达一下,桐谷健太赛高~\(≧▽≦)/~

isPCBroswer:检测是否为PC端浏览器模式

function isPCBroswer() { let e = navigator.userAgent.toLowerCase() , t = "ipad" == e.match(/ipad/i) , i = "iphone" == e.match(/iphone/i) , r = "midp" == e.match(/midp/i) , n = "rv:1.2.3.4" == e.match(/rv:1.2.3.4/i)

几个主流浏览器的内置http的抓包工具(转)

对于学习网站的人或者相关编程人员,经常需要用到http抓包工具来跟踪网页,但主流抓包软件如httpwatch.httpanalyzerstdv都是收费的,破解版往往也不稳定.实际上现在很多浏览器都内置了免费的抓包工具,小编今天就向大家简单介绍几款. 工具/原料 几款常见浏览器 方法/步骤 1 谷歌浏览器chrome自带的http抓包工具界面简洁大方,功能也很强大,唯一的不足就是界面是英文的.打开方式:点击右上角的菜单-->工具-->开发者工具. 2 下图是打开之后的界面.可以随便访问一个页面来

三大主流手机浏览器对比:哪个最安全?

随着用户在手机上操作的应用越多越来越多,不止是上网浏览网页等,还涉及网购和手机支付等,安全问题已经成为移动互联网最重要的问题.作为用户使用最频繁的应用之一,手机浏览器的安全问题也更为突出,那么目前市面主流的手机浏览器哪款才是更安全的呢? 本文对国内市场份额前三名的UC手机浏览器.QQ手机浏览器.百度手机浏览器进行逐一对比. 一.信息传输对比 信息传输是一个应用安全最为重要的环节,如果敏感信息泄露,将造成用户直接利益损失.通过网络劫包和解密,发现三款手机浏览器在信息传输过程中加密方式不一. 首先先