六 18
单纯从检测浏览器的版本来说, userAgent对IE8已经不再可靠,原因是IE8加入了兼容性视图功能,导致IE8出现多个userAgent。
详细查看gracecode的《由IE8 User-Agent 更新想到的》一文
在ie8下分别用三种”浏览器模式”运行以下代码
alert(navigator.appVersion) |
我在Vista下运行以上代码的结果如下:

可以看出除了IE版本号不一样以外,Trident标识也有区别
那么如何判断IE8,办法还是有的……
功能检测
检测浏览器是否支持IE8特有的WebSlices、Accelerator、Visual Search 功能
function isIE8(){ return typeof (window.external.AddToFavoritesBar) != "undefined" || typeof (window.external.AddService) != "undefined" || typeof (window.external.AddService) != "undefined" } try{ if(isIE8()) alert('IE8') else alert('非IE8浏览器'); } catch(e){ alert('非IE8浏览器'); } |
对象检测
利用IE8的XDomainRequest对象检测(推荐)
var isIE8 = !!window.XDomainRequest; |
以上两种解决方案现在是可以解决IE8的判断问题,但是也只是向后兼容的解决方案,如果IE发布新的浏览器,以上的方法将不再可靠,到时候还需要userAgent和特性检测相结合的方法。IE真是个让人很头疼的东西~。
延伸
IE,FF,safari,chrome,opera主流浏览器的检测
ie = '\v'=='v'; ie = !!top.execScript; ie = /*@cc_on!@*/!1; ie8 = !!window.XDomainRequest; IEVersion = 0/*@cc_on+ScriptEngineMajorVersion()@*/; ff = /a/[-1]=='a'; ff3 = (function x(){})[-5]=='x'; ff2 = (function x(){})[-6]=='x'; safari=/a/.__proto__=='//'; chrome=/source/.test((/a/.toString+'')); opera=/^function \(/.test([].sort); |