最新地址请查看: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,然后进行过处理获取浏览器个性信息及版本。