A-A+

判断使用的浏览器类型完美代码

2016年10月13日 web前端设计 暂无评论 阅读 6 views 次

以前有讲过N多的关于浏览器类型判断程序,下面我来总结一下可以判断现在各种浏览器类型的代码,有需要的朋友可参考,代码如下:

  1. <script language="JavaScript" type="text/javascript">  
  2. if ((navigator.userAgent.indexOf('MSIE') >= 0) && (navigator.userAgent.indexOf('Opera') < 0)){alert('你是使用IE')}else  
  3.     if (navigator.userAgent.indexOf('Firefox') >= 0){alert('你是使用Firefox')}else  
  4.         if (navigator.userAgent.indexOf('Opera') >= 0){alert('你是使用Opera')}else  
  5. {alert('你是使用其他的浏览器浏览网页!')}  
  6. </script>  

本段代码判断不仅包括电脑浏览器,还包括安卓、ios系统的手机以及平板电脑,游戏系统,代码如下:

  1. var client = function(){  
  2.     //呈现引擎  
  3.     var engine ={  
  4.         ie : 0,  
  5.         gecko : 0,  
  6.         webkit : 0,  
  7.         khtml : 0,  
  8.         opera : 0,  
  9.          
  10.         ver : null  
  11.     };  
  12.     //浏览器  
  13.     var browser = {  
  14.         ie : 0,  
  15.         firefox :0,  
  16.         safari  : 0,  
  17.         konq :0,  
  18.         opera : 0,  
  19.         chrome : 0,  
  20.         ver : null  
  21.     };  
  22.     var system ={  
  23.         win :false,  
  24.         max : false,  
  25.         x11 : false,  
  26.         //移动设备  
  27.         iphone : false ,  
  28.         ipod : false,  
  29.         ipad : false,  
  30.         ios  : false,  
  31.         android : false,  
  32.         nokiaN : false,  
  33.         winMoble : false,  
  34.          
  35.         //游戏系统  
  36.         wii :false,  
  37.         ps : false  
  38.     };  
  39.     var ua =navigator.userAgent;  
  40.     //Opera 9以后出现了两种字符串代理的方式 一种方式就是将自身标识另外一个浏览器 另外一种方式就是标志自己为firefox或者IE  
  41.     //在后面这种情况下 用户代理字符串实际上与其他浏览器返回的相同--既没有opera的字样,也不包含opera的版本信息  
  42.     //因此判断浏览器先从opera开始  
  43.     if(winddow.opera){  
  44.         engine.ver = browser.ver = window.opera.version();  
  45.         egine.opera = browser.opera = parseFloat(engine.ver);  
  46.     //第二个检测WebKit 是因为WebKit的用户代理字Gecko"和"HTMKL"的字符串 所以如果首先检测他们都有错误的结论  
  47.     }else if (/AppleWebKit/(S+)/.test(ua)){  
  48.         engin.ver = RegExp["$1"]; 
  49.         engine.webkit = parseFloat(engine.ver); 
  50.         //确定是chrome还是Safari 
  51.         if(/Chrome/(S+)/.test(ua){ 
  52.             browser.ver = RegExp["$1"]; 
  53.             browser.chrome = parseFloat(brower.ver); 
  54.         }else if(/Version/(+S)/.test(ua)){//safari 3.0后增加了Version属性 
  55.             browser.ver = RegExp["$1"]; 
  56.             browser.safari = parseFloat(brower.ver); 
  57.         }else{ 
  58.             var safariVersion = 1; 
  59.             if(engine.webkit<100){ 
  60.                 safariVersion = 1; 
  61.             }else if(engine.ver<312){ 
  62.                 safariVersion = 1.2; 
  63.             }else if(engine.ver<412){ 
  64.                 safariVersion = 1.3; 
  65.             }else{ 
  66.                 safariVersion = 2; 
  67.             } 
  68.             browser.safari = browser.ver = safariVersion; 
  69.         } 
  70.     }else if(/KHTML/(S+)/.test(ua)||/Konqueror/([^;]+)/.test(ua)){//Linux下浏览器 
  71.         engine.ver = browser.ver = RegExp["$1"]; 
  72.         engine.khtml = parseFloat(engine.ver); 
  73.     }else if(/rv:([^)]+) Gocko/d{8}/.test(ua)){ 
  74.          engine.ver = RegExp["$1"]; 
  75.          engine.gecko = parseFloat(engine.ver); 
  76.          //确定不是firefox 
  77.          if(/Firefox/(S+)/.test(ua){ 
  78.             browser.ver = RegExp["$1"]; 
  79.             browser.firefox = parseFloat(browser.ver); 
  80.          } 
  81.     }else if (/MSIE ([^;]+)/.test(ua)){ 
  82.         engine.ver = browser.ver = RegExp["$1"]; 
  83.         engine.ie  = browser.ie = parseFloat(engine.ver); 
  84.     } 
  85.     //检测浏览器 
  86.     browser.ie =engine.ie; 
  87.     browser.opera = engine.opera; 
  88.     var p = navigator.platform; 
  89.     system.win = p.indexOf("Win")==0; 
  90.     system.mac = p.indexOf("Mac")==0; 
  91.     system.x11 = (p=="x11")||p.indexOf("Linux")==0; 
  92.  
  93.     if(system.win){ 
  94.         if(/Win(?:dow)?([^do]{2}s?(d+.d+)?/.test(ua)){ 
  95.              if(RegExp["$1"]=="NT"){ 
  96.                  switch(RegExp["$2"]){ 
  97.                     case "5.0" : 
  98.                         system.win = "2000"; 
  99.                         break; 
  100.                     case "5.1" : 
  101.                         system.win = "xp"; 
  102.                     case "6.0" : 
  103.                         system.win = "Vista"; 
  104.                         break; 
  105.                     case "6.1" : 
  106.                         system.win = "7"; 
  107.                         break; 
  108.                     default : 
  109.                         system.win ="NT"; 
  110.                         break; 
  111.                  } 
  112.              }else if(RegExp["$1"]=="9x"){ 
  113.                 system.win = "ME"; 
  114.              }else{ 
  115.                 system.win = RegExp["$1"]; 
  116.              } 
  117.         } 
  118.     } 
  119.  
  120.     //移动设备 
  121.     system.iphone = ua.indexOf("iPhone")>-1; 
  122.     system.ipod = ua.indexOf("iPod")>-1; 
  123.     system.ipad = ua.indexOf("iPad")>-1; 
  124.     system.nokiaN = ua.indexOf("nokiaN")>-1; 
  125.     //win Mobile 
  126.     if(system.win == "CE"){ 
  127.         system.winMobile = system.win; 
  128.     }else if(system.win = "Ph"){ 
  129.         if(/Windows Phone OS (d+_d+)/.test(ua)){ 
  130.             system.win = "Phone"; 
  131.             system.winMobile parseFloat(RegExp["$1"]); 
  132.         } 
  133.     } 
  134.     //检测ios版本 
  135.     // 
  136.     if(system.mac && ua.indexOf("Mobile")>-1){ 
  137.          if(/CPU (?:iPhone)?OS (d+_d+)/.test(ua){ 
  138.              system.ios = parseFloat(RexExp.$1.replace("_","."));        
  139.          }else { 
  140.              system.ios = 2 ;//不能真正检查出来,所以猜测出来一个结果 
  141.          } 
  142.     } 
  143.  
  144.     //检查安卓版本 
  145.     // 
  146.     if(/Android (d+/_d+)/.test(ua)){ 
  147.         system.andriod = parseFloat(RegExp.$1); 
  148.     } //xiariboke.com 
  149.     //游戏系统 
  150.     system.wii = us.indexOf("Wii")>-1;  
  151.     system.ps = /playstation/i.test(ua);  
  152.     //返回对象  
  153.     return {  
  154.         engine : engine,  
  155.         browser : browser,  
  156.         system : system  
  157.     }  
  158. }  

下面是各种浏览器的特征及其userAgent。

IE

只有IE支持创建ActiveX控件,因此她有一个其他浏览器没有的东西,就是ActiveXObject函数。只要判断window对象存在ActiveXObject函数,就可以明确判断出当前浏览器是IE。而IE各个版本典型的userAgent如下:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)

其中,版本号是MSIE之后的数字。

Firefox

Firefox中的DOM元素都有一个getBoxObjectFor函数,用来获取该DOM元素的位置和大小(IE对应的中是getBoundingClientRect函数)。这是Firefox独有的,判断它即可知道是当前浏览器是Firefox。Firefox几个版本的userAgent大致如下:

Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1

Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3

Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12

其中,版本号是Firefox之后的数字。

Opera

Opera提供了专门的浏览器标志,就是window.opera属性。Opera典型的userAgent如下:

Opera/9.27 (Windows NT 5.2; U; zh-cn)

Opera/8.0 (Macintosh; PPC Mac OS X; U; en)

Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0

其中,版本号是靠近Opera的数字。

Safari

Safari浏览器中有一个其他浏览器没有的openDatabase函数,可做为判断Safari的标志。Safari典型的userAgent如下:

Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13

Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3

其版本号是Version之后的数字。

Chrome

Chrome有一个MessageEvent函数,但Firefox也有。不过,好在Chrome并没有Firefox的getBoxObjectFor函数,根据这个条件还是可以准确判断出Chrome浏览器的。目前,Chrome的userAgent是:

Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13

标签:

给我留言