使用JavaScript检测Internet Explorer 6的最佳方法是什么?
If browser == IE6 { alert('hi'); }
Bjorn.. 32
条件评论是一个很好的选择:
编辑:如果您仍然希望在2017年或之后支持IE 6,那么我的心就会向您致敬.2017年这个问题的答案实在不用担心IE 6.它不再是受支持的浏览器了.任何可以运行此浏览器的操作系统和浏览器本身都不再获得安全更新.这意味着使用此软件的用户很有可能被利用.对于负担不起升级的人来说,这是一个大问题.
条件评论是一个很好的选择:
编辑:如果您仍然希望在2017年或之后支持IE 6,那么我的心就会向您致敬.2017年这个问题的答案实在不用担心IE 6.它不再是受支持的浏览器了.任何可以运行此浏览器的操作系统和浏览器本身都不再获得安全更新.这意味着使用此软件的用户很有可能被利用.对于负担不起升级的人来说,这是一个大问题.
冒实际回答被问到的问题的风险(并假设提问者有充分的理由专门检测IE6):
if (/\bMSIE 6/.test(navigator.userAgent) && !window.opera) { // yep, browser claims to be IE6 }
var ua = window.navigator.userAgent; var msie = ua.indexOf ( "MSIE " ); if ( msie > 0 ) // If Internet Explorer, return version number return parseInt (ua.substring (msie+5, ua.indexOf (".", msie ))); else // If another browser, return 0 return 0;
资料来源:http://support.microsoft.com/kb/167820
不要将检测基于用户代理.还有很多其他浏览器使用不是IE6的Trident 4引擎(IE6使用的那个).
答案很简单:不检测浏览器,检测引擎.为此,您必须使用所谓的基于特征的检测.
使用基于特征的检测具有以下优点:
使用与目标相似的渲染引擎检测所有浏览器.
更容易的代码分支,以解决渲染引擎的问题.
减少误报(可以修改UA以作为另一个浏览器传递,功能不能).
以下脚本使用浏览器功能来检测引擎.感谢MooTools制作团队(http://mootools.net/developers/).
注意:下面的代码段已被修改为在没有MooTools javascript框架的情况下工作.如果您确实希望使用MooTools,则不再需要此代码,它是分发的一部分.
function $tryCatch(){ for (var i = 0, l = arguments.length; i < l; i++){ try { return arguments[i](); } catch(e){} } return null; }; var Browser = { Engine: {name: 'unknown', version: 0}, Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()}, Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)}, Plugins: {}, Engines: { presto: function(){ return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925)); }, trident: function(){ return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? ((document.querySelectorAll) ? 6 : 5) : 4); }, webkit: function(){ return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419); }, gecko: function(){ return (!document.getBoxObjectFor && window.mozInnerScreenX == null) ? false : ((document.getElementsByClassName) ? 19 : 18); } } }; Browser.Platform[Browser.Platform.name] = true; Browser.detect = function(){ for (var engine in this.Engines){ var version = this.Engines[engine](); if (version){ this.Engine = {name: engine, version: version}; this.Engine[engine] = this.Engine[engine + version] = true; break; } } return {name: engine, version: version}; }; Browser.detect(); Browser.Request = function(){ return $tryCatch(function(){ return new XMLHttpRequest(); }, function(){ return new ActiveXObject('MSXML2.XMLHTTP'); }, function(){ return new ActiveXObject('Microsoft.XMLHTTP'); }); }; Browser.Features.xhr = !!(Browser.Request()); Browser.Plugins.Flash = (function(){ var version = ($tryCatch(function(){ return navigator.plugins['Shockwave Flash'].description; }, function(){ return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version'); }) || '0 r0').match(/\d+/g); return {version: parseInt(version[0] || 0 + '.' + version[1], 10) || 0, build: parseInt(version[2], 10) || 0}; })(); function $exec(text){ if (!text) return text; if (window.execScript){ window.execScript(text); } else { var script = document.createElement('script'); script.setAttribute('type', 'text/javascript'); script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerText' : 'text'] = text; document.head.appendChild(script); document.head.removeChild(script); } return text; };
只需包含此JavaScript类,您就可以通过执行以下操作来检测使用Trident4引擎的IE6和任何其他浏览器:
if(Browser.Engine.trident4) { alert('IE6 or similar...'); } elseif(Browser.Engine.name == "trident") { alert('Internet Explorer Trident Rendering Engine Version ' + Browser.Engine.version); }