js检测浏览器版本

最新地址请查看:http://leeyee.github.io/blog/2009/08/24/javacript-broswer-check/


以下浏览器版本的判断方法来自《JavaScript 高级程序设计》第八章。跟原书中的代码没有任何出入,唯一不同的是加入了对Google Chrome浏览器的判断。

该篇内容主要是为了实现调用window.close()关闭窗口时IE不提示下篇的服务。同时仅作资料备份使用,不做他用。

 

总体上我们验证浏览器及其版本是通过浏览器的user-agent字符串来检测的。

首先我们要获取user-agent字符串及浏览器版本

var sUserAgent = navigator.userAgent;
      	//parseFloat 运行时逐个读取字符串中的字符,当他发现第一个非数字符是就停止
      	var fAppVersion = parseFloat(navigator.appVersion);
  

接着我们需要提供一个版本比较函数,方便我们对小数版本号进行比对

function compareVersions(sVersion1,sVersion2){
    	var aVersion1 = sVersion1.split(".");
    	var aVersion2 = sVersion2.split(".");
    	
    	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 < aVersion2.length - aVersion1.length ; i++){
    			aVersion2.push(0);
    		}
    	}
    	for(var i = 0 ;i < aVersion1.length ; i++){
    		var iVal1 = parseInt(aVersion1[i],10);
    		var iVal2 = parseInt(aVersion2[i],10);
    		if(iVal1 < iVal2){
    			return -1;
    		}else if(iVal1 > iVal2){
    			return 1;
    		}
    	}
    	return 0;
    }

以上我们的基本准备工作已经完成,现在开始进行浏览器版本判断.

1、Opera 浏览器检测

var isOpera = sUserAgent.indexOf("Opera") > -1 ;
        var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false;
        
        if(isOpera){
        	var fOperaVersion ; //定义Opera浏览器版本
        	//首先检测Opera是否进行了伪装
        	if(navigator.appName == 'Opera'){
        		fOperaVersion = fAppVersion;//如果没有进行伪装,则直接后去版本号
        	}else{
        		var reOperaVersion = new RegExp("Opera (//d+//.//d+)");
        		reOperaVersion.test(sUserAgent);//使用正则表达式的test方法测试并将版本号保存在RegExp.$1中
        		fOperaVersion = parseFloat(RegExp['$1']);
        	}
        	
        	isMinOpera4 = fOperaVersion >= 4;
        	isMinOpera5 = fOperaVersion >= 5;
        	isMinOpera6 = fOperaVersion >= 6;
        	isMinOpera7 = fOperaVersion >= 7;
        	isMinOpera7_5 = fOperaVersion >= 7.5;
        }

2、Google Chrome 浏览器检测

var isChrome = sUserAgent.indexOf("Chrome") > -1 ;
        var isMinChrome2 = false;//这没有检测完,如需要可针对Chrome进行检测
        if(isChrome){
        	var reChorme = new RegExp("Chrome///(//d+//.//d+(?://.//d+)?)");
        	reChorme.test(sUserAgent);
        	isMinChrome2 = compareVersions(RegExp["$1"],"2.0") >= 0;
        }

3、Konqueror/Safari 浏览器检测

//排除Chrome信息,因为在Chrome的user-agent字符串中会出现Konqueror/Safari的关键字
        var isKHTML = (sUserAgent.indexOf("KHTML") > -1 
                        || sUserAgent.indexOf("Konqueror") > -1 
                        || sUserAgent.indexOf("AppleWebKit") > -1) && !isChrome ;
        
        var isMinSfari1 = isMinSfari1_2 = false;
        var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false;
        
        if(isKHTML){//判断是否基于KHTML,如果时的话在继续判断属于何种KHTML浏览器
        	var isSafari1 = sUserAgent.indexOf("AppleWebKit") > -1;
        	var isKonq = sUserAgent.indexOf("Konqueror") > -1;
        	
        	if(isSafari1){
        		 var reAppleWebKit = new RegExp("AppleWebKit///(//d+(?://.//d*)?)");
        		 reAppleWebKit.test(sUserAgent);
        		 var fAppleWebKitVersion = parseFloat(RegExp["$1"]);
        		 
        	   isMinSfari1 = fAppleWebKitVersion >= 85;
        	   isMinSfari1_2 = fAppleWebKitVersion >= 124;
        	}else if(isKonq){
        		var reKong = new RegExp("Konqueror///(//d+(?://.//d+(?://.//d)?)?)");
        		reKong.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;
        	}
        }

4、IE 浏览器检测

// !isOpera 避免是由Opera伪装成的IE
        var isIE = sUserAgent.indexOf("compatible") > -1 && sUserAgent.indexOf("MSIE") > -1 && !isOpera; 
        var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIE6 = isMinIE7 = isMinIE8 = false;
        
        if(isIE){
        	var reIE = new RegExp("MSIE (//d+//.//d+);");
        	reIE.test(sUserAgent);
        	var fIEVersion = parseFloat(RegExp["$1"]);
        	
        	isMinIE4 = fIEVersion >= 4;
        	//alert('isMinIE4='+isMinIE4);
        	isMinIE5 = fIEVersion >= 5;
        	//alert('isMinIE5='+isMinIE5);
        	isMinIE5_5 = fIEVersion >= 5.5;
        	//alert('isMinIE5_5='+isMinIE5_5);
        	isMinIE6 = fIEVersion >= 6;
        	//alert('isMinIE6='+isMinIE6);
        	isMinIE7 = fIEVersion >= 7;
          //alert('isMinIE7='+isMinIE7);
        	isMinIE8 = fIEVersion >= 8;
        	//alert('isMinIE8='+isMinIE8);
        }

5、Mozilla FireFox 浏览器检测

//排除Chrome 及Konqueror/Safari的伪装
        var isMoz = sUserAgent.indexOf("Gecko") > -1 && !isChrome &&!isKHTML;
        var isMinMoz1 = isMinMoz1_4 = isMinMoz1_5 = false;
        
        if(isMoz){
        	var reMoz = new RegExp("rv:(//d+//.//d+(?://.//d+)?)");
        	reMoz.test(sUserAgent);
        	isMinMoz1 = compareVersions(RegExp["$1"],"1.0") >= 0;
        	isMinMoz1_4 = compareVersions(RegExp["$1"],"1.4") >= 0;
        	isMinMoz1_5 = compareVersions(RegExp["$1"],"1.5") >= 0;
        }

基本上浏览器的判断就到此为止,其他浏览器不做说明。可以使用

alert(navigator.userAgent);
提示的信息具体分析相应浏览器的user-agent,然后进行过处理获取浏览器个性信息及版本。

转载于:https://my.oschina.net/yeelee/blog/650891

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值