您的位置:首页 > Web前端 > JavaScript

js检测浏览器版本

2009-08-24 21:47 369 查看
最新地址请查看:http://iyiguo.net/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,然后进行过处理获取浏览器个性信息及版本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: