检测浏览器和操作系统

Posted on 2007-12-22 23:08 探佚 阅读(604) 评论(0)  编辑  收藏 所属分类: CSS/JavaScript/AJAX

真正懂的人会知道这些代码的价值...这些代码出自<<javascript高级程序设计>>,自己已经测试过。

// 浏览器的useAgent信息
var sUserAgent = navigator.userAgent;                    
// 浏览器的版本信息
var fAppVersion = parseFloat(navigator.appVersion);        

/**
 *
 * 通过传入的appVersion比较浏览器的版本高低
 * @param sVersion1
 * @param sVersion2
 * @return int
 
*/
function compareVersions(sVersion1,sVersion2){
    
var aVersion1 = sVersion1.split(".");
    
var aVersion2 = sVersion1.split(".");
    
if(aVersion1.length > aVersion2.length){
        
for(var i = 0 ; aVersion1.length - aVersion2.length ; i++){
            aVersion2.push(
"0");
        }
    }
else if (aVersion1.length < aVersion2.length){
        
for(var i = 0 ; aVersion2.length - aVersion1.length ; i++){
            aVersion1.push(
"0");
        }
    }

    
for(var i = 0 ; i < aVersion.length ; i++){
        
if(aVersion1[i] > aVersion2[i]){
            
return 1;
        }
else if(aVersion1[i] > aVersion2[i]){
            
return -1
        }
else{
            
return 0;
        }
    }
}

/**
 *
 * 检测Opera
 *
 
*/
// 判断是否是Opera浏览器
var isOpera = sUserAgent.indexOf("Opera"> -1;
// 检测Opera浏览器的版本号
var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false;
if(isOpera){
    
var fOperaVersion;
    
if(navigator.appName == "Opera"){
        fOperaVersion 
= fAppVersion;
    }
else{
        
var reOperaVersion = new RegExp("Opera (\\d+\\.\\d+)");
        reOperaVersion.test(fOperaVersion);
        fOperaVersion 
= parseFloat(RegExp["$1"]);
    }

    isMinOpera4 
= fOperaVersion >= 4;
    isMinOpera5 
= fOperaVersion >= 5;
    isMinOpera6 
= fOperaVersion >= 6;
    isMinOpera7 
= fOperaVersion >= 7;
    isMinOpera7_5 
= fOperaVersion >= 7.5;
}

/**
 *
 * 检测IE
 *
 
*/
// 判断是否是IE浏览器
var isIE = (sUserAgent.indexOf("compatible"> -1&& 
           (sUserAgent.indexOf(
"MSIE"> -1&& 
           (
!isOpera);
// 检测IE浏览器的版本号
var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIE6 = isMinIE7 = false;
if(isIE){
    
var reIE = new RegExp("MSIE (\\d+\\.\\d+)");
    reIE.test(sUserAgent);
    
var fIEVersion = parseFloat(RegExp["$1"]);
    
    isMinIE4 
= fIEVersion >= 4;
    isMinIE5 
= fIEVersion >= 5;
    isMinIE5_5 
= fIEVersion >= 5.5;
    isMinIE6 
= fIEVersion >= 6;
    isMinIE7 
= fIEVersion >= 7;
}

/**
 *
 * 检测Konquersor/Safari
 *
 
*/
// 判断浏览器是否是基于KHTML项目
var isKHTML = (sUserAgent.indexOf("KHTML"> -1|| 
              (sUserAgent.indexOf(
"Konqueror"> -1||
              (sUserAgent.indexOf(
"AppleWebKit"> -1);
// 检测浏览器的版本号
var isMinSafari1 = isMinSafari1_2 = false;
var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false;
if(isKHTML){
    
var isSafari = sUserAgent.indexOf("AppleWebKit"> -1;
    
var isKonq = sUserAgent.indexOf("Konqersor"> -1;
    
if(isSafari){
        
var reAppleWebKit = new RegExp("AppleWebKit\\/(\\d+(?:\\.\\d*)?)");
        reAppletWebKit.test(sUserAgent);
        
var fAppleWebKitVersion = parseFloat(RegExp["$1"]);
        
        isMinSafari1 
= fAppleWebKitVersion >= 85;
        isMinSafari1_2 
= fAppleWebKitVersion >= 124;
    }
else if(isKonq){
        
var reKonq = new RegExp("Konquersor\\/(\\d+(?:\\.\\d+(?:\\.\\d)?)?)");
        reKonq.test(sUserAgent);
        isMinKonq2_2 
= compareVersions(RegExp["$1"],"2.2">= 0;
        isMinKonq3 
= compareVersions(RegExp["$1"],"3.0">= 0;
        isMinKonq3_1 
= compareVersions(RegExp["$1"],"3.1">= 0;
        isMinKonq3_2 
= compareVersions(RegExp["$1"],"3.2">= 0;
    }
}

/**
 *
 * 检测Mozilla
 *
 
*/
// 判断是否是Mozilla浏览器
var isMozilla = (sUserAgent.indexOf("Gecko"> -1&& (!isKHTML);
// 检测Mozilla版本号
var isMinMozilla1 =  isMinMozilla1_4 =  isMinMozilla1_5 =  false;
if(isMozilla){
    
var reMozilla = new RegExp("rv:(\\d+\\.\\d+(?:\\.\\d+)?)");
    reMozilla.test(sUserAgent);
    isMinMosilla1 
= compareVersions(RegExp["$1"],"1.0">= 0;
    isMinMosilla1_4 
= compareVersions(RegExp["$1"],"1.4">= 0;
    isMinMosilla1_5 
= compareVersions(RegExp["$1"],"1.5">= 0;
}

/**
 *
 * 检测Netscapse Communicator 4.x
 *
 
*/
// 判断是否是NS4浏览器
var isNS4 = (!isIE) && 
            (
!isOpera) && 
            (
!isMozilla) && 
            (
!isKHTML) && 
            (sUserAgent.indexOf(
"Mozilla"== 0&& 
            (navigator.appName 
== "Netscapse"&& 
            (fAppVersion 
>= 4.0 && fAppVersion < 5.0);
// 检测NS4版本号
var isMinNS4 = isMinNS4_5 = isMinNS4_7 = isMinNS4_8 = false;
if(isNS4){
    isMinNS4 
= true;
    isMinNS4_5 
= fAppVersion >= 4.5;
    isMinNS4_7 
= fAppVersion >= 4.7;
    isMinNS4_8 
= fAppVersion >= 4.8;
}

/**
 *
 * 检测Windows95,98,ME,2000,XP
 *
 
*/
var isWin = (navigator.platform == "Win32"|| (navigator.platform == "Windows");
var isWin95 = isWin98 = isWinNT4 = isWin2K = siWinME = isWinXP = false;
if(isWin){
    isWin95 
= (sUserAgent.indexOf("Win95"> -1|| (sUserAgent.indexOf("Windows 95"> -1) ;
    isWin98 
= (sUserAgent.indexOf("Win98"> -1|| (sUserAgent.indexOf("Windows 95"> -1) ;
    isWinME 
= (sUserAgent.indexOf("Win 9x 4.90"> -1|| (sUserAgent.indexOf("Windows ME"> -1) ;
    isWin2K 
= (sUserAgent.indexOf("Windows NT 5.0"> -1|| (sUserAgent.indexOf("Windows 2000"> -1) ;
    isWinXP 
= (sUserAgent.indexOf("Windows NT 5.1"> -1|| (sUserAgent.indexOf("Windows XP"> -1) ;
    isWinNT4 
= (sUserAgent.indexOf("WinNT"> -1||
            (sUserAgent.indexOf(
"Windows NT"> -1||
            (sUserAgent.indexOf(
"WinNT4.0"> -1||
            (sUserAgent.indexOf(
"Windows NT 4.0"> -1&&
            (
!isWinME && !isWin2K && !isWinXP);
}

/**
*
* 检测Macintosh操作系统
*
*/
var isMac = (navigator.platform == "Mac68K"||
           (navigator.platform 
== "MacPPC"||
           (navigator.platform 
== "Macintosh");
var isMac68K = isMacPPC = false;
if(isMac){
    isMac68K 
= (sUserAgent.indexOf("Mac_68000"> -1|| (sUserAgent.indexOf("68K"> -1);
    isMacPPC 
= (sUserAgent.indexOf("Mac_PowerPPC"> -1|| (sUserAgent.indexOf("PPC"> -1);
}

/**
 *
 * 通过传入的appVersion比较操作系统的版本高低
 * @param sVersion1
 * @param sVersion2
 * @return int
 
*/
function compareVersions(sVersion1,sVersion2){
    
var aVersion1 = sVersion1.split(".");
    
var aVersion2 = sVersion1.split(".");
    
if(aVersion1.length > aVersion2.length){
        
for(var i = 0 ; aVersion1.length - aVersion2.length ; i++){
            aVersion2.push(
"0");
        }
    }
else if (aVersion1.length < aVersion2.length){
        
for(var i = 0 ; aVersion2.length - aVersion1.length ; i++){
            aVersion1.push(
"0");
        }
    }

    
for(var i = 0 ; i < aVersion.length ; i++){
        
if(aVersion1[i] > aVersion2[i]){
            
return 1;
        }
else if(aVersion1[i] > aVersion2[i]){
            
return -1
        }
else{
            
return 0;
        }
    }
}

/**
*
* 检测Unix操作系统
*
*/
var isUnix = (navigator.platform == "X11"&& (!isWin) && (!isMac);
var isSunOS = isMinSunOS4 = isMinSunOS5 = isMinSunOS5_5 = false;
if(isUnix){
    isSunOS 
= sUserAgent.indexOf("SunOS"> -1;
    
if(isSunOS){
        
var reSunOS = new RegExp("SunOS (\\d+\\.\\d+(?:\\.\\d+)?)");
        reSunOS.test(sUserAgent);
        isMinSunOS4 
= compareVersions(RegExp["$1"],"4.0">= 0;
        isMinSunOS5 
= compareVersions(RegExp["$1"],"5.0">= 0;
        isMinSunOS5_5 
= compareVersions(RegExp["$1"],"5.5">= 0;
    }
}

只有注册用户登录后才能发表评论。


网站导航:
 

Copyright © 探佚