首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JS浏览器特征检测,该如何处理

2013-06-25 
JS浏览器特征检测浏览器检测一般都用UserAgent来判别吗?有没有用一些浏览器特有的特征来检测的,比如!DOCT

JS浏览器特征检测
浏览器检测一般都用UserAgent来判别吗?有没有用一些浏览器特有的特征来检测的,比如
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Borser Detection</title>
<script  type="text/javascript">
function selfUserAgent(){   
        if(window.ActiveXObject){ //MSIE 6.0 or below   
               
            //判断是否是IE 7以上   
            if(document.documentElement && typeof document.documentElement.style.maxHeight != "undefined" ){   
                  
               //判断是否是IE8+   
               if(typeof document.adoptNode != "undefined"){//Safari3 & FF & Opera & Chrome & IE8+   
                   return "IE8及以上";   
               }   
                   
               return "IE7及以上";   
            }   
               
           return "MSIE 6.0 or below";   
       }else if(typeof window.opera != "undefined"){ //Opera 独占   
            return "Opera";   
        }else if(typeof window.netscape != "undefined"){ //mozilla 独占   
            if(typeof window.Iterator != "undefined"){   
                if(typeof document.styleSheetSets != "undefined"){//Firefox &Opera 9   
                    return "firefox 3及以上";   
                }   
                  
                return "firefox 2";   
            }   
               
            return "Mozilla 1";   


       }else if(typeof window.pageXOffset != "undefined"){ //Mozilla & safari   
           try{   
               if(typeof external.AddSearchProvider != "undefined"){ //firefox & chrome   
                   return "chrome";   
                }   
            } catch (e) {   
                return "safari";   
            }   
        }else { //unknown   
            return "unknown";   
        }   
   };  

</script>
</head>

<body >
<script type="text/javascript">
document.write(selfUserAgent());
</script>

</script>
</body>
</html>

能不能做到判断的更详细一点的呢?比如说还可以判断其他类型的浏览器,比如说判断出的浏览器版本更详细些。求各位大神指导啊!  浏览器 JavaScript
[解决办法]
这个浏览器类型的判断是一件很复杂的事情,涉及到浏览器的引擎,版本号,运行平台等等。当然了,这种是最细致的浏览器检查。稍微粗略一级的是判断浏览器是否支持特定的功能,这个是大部分的web项目使用的检测。第一种的检测方法如下:
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,
xll:false,

iphone:false,
ipad:false,
ipod: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(browser.ver);
  //确定是chrome还是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.xll=(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 "6.1":system.win="7";break;
 default:system.win="NT";break;
 }
 }else if(RegExp["$1"]){
 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(/Window 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;
}
}

   //检测Android
   if(/Android (\d+\.\d+)/.test(ua)){
   system.android=parsefloat(RegExp["$1"]);
   }
   
   //游戏系统
   system.wii=ua.indexOf("Wii")>-1;
   system.ps=/playstation/i.texst(ua);
   //返回这些对象
   return {
   engine:engine,
   browser:browser,
   system:system
   };
};
第二种能力检测检测手段如下:
var hasXmlDom=document.implementation.hasFeature("XML","1.0");
但是这个检测有时并不可靠,需要进行能力检测。

热点排行