在不使用 jQuery 或任何附加库的情况下,检测 IE 和 JavaScript 版本低于 9 的浏览器的最快、最短(最佳)方法是什么?
在没有库的情况下在 JavaScript 中检查 IE 小于 9 的最佳方法
Javascript
var ie = (function(){
var undef,
v = 3,
div = document.createElement('div'),
all = div.getElementsByTagName('i');
while (
div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
all[0]
);
return v > 4 ? v : undef;
}());
然后你可以这样做:
ie < 9
作者 James Panolsey 从这里:http ://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments
物有所值:
if( document.addEventListener ){
alert("you got IE9 or greater");
}
这成功地针对 IE 9+,因为该addEventListener
方法很早就被除 IE 之外的每个主要浏览器支持。(Chrome、Firefox、Opera 和 Safari)MDN 参考。它目前在 IE9 中得到支持,我们可以期待它在这里继续得到支持。
使用条件注释,您可以创建一个仅在 IE 小于 9 中执行的脚本块。
<!--[if lt IE 9 ]>
<script>
var is_ie_lt9 = true;
</script>
<![endif]-->
当然,您可以在此块之前添加一个通用块声明var is_ie_lt9=false
,这将覆盖小于 9 的 IE。(在这种情况下,您需要删除var
声明,因为它会重复)。
编辑:这是一个不依赖于内嵌脚本块的版本(可以从外部文件运行),但不使用用户代理嗅探:
通过@cowboy :
with(document.createElement("b")){id=4;while(innerHTML="<!--[if gt IE "+ ++id+"]>1<![endif]-->",innerHTML>0);var ie=id>5?+id:0}
bah 有条件的评论!一路条件码!!!(愚蠢的IE)
<script type="text/javascript">
/*@cc_on
var IE_LT_9 = (@_jscript_version < 9);
@*/
</script>
说真的,只是把它扔在那里,以防它更适合你……它们是一样的,这可以放在 .js 文件中,而不是内联 HTML
注意:此处 jscript_version 检查为“9”完全是巧合。将其设置为 8、7 等不会检查“是 IE8”,您需要查找这些浏览器的 jscript 版本。
以下是对 James Padolsey 解决方案的改进:
1)它不会污染内存(例如,James 的代码片段在检测 IE11 时创建了 7 个未删除的文档片段)。
2) 它更快,因为它在生成标记之前检查 documentMode 值。
3) 它更易读,尤其是对于 JavaScript 初学者。
要点链接:https : //gist.github.com/julianshapiro/9098609
/*
- Behavior: For IE8+, we detect the documentMode value provided by Microsoft.
- Behavior: For <IE8, we inject conditional comments until we detect a match.
- Results: In IE, the version is returned. In other browsers, false is returned.
- Tip: To check for a range of IE versions, use if (!IE || IE < MAX_VERSION)...
*/
var IE = (function() {
if (document.documentMode) {
return document.documentMode;
} else {
for (var i = 7; i > 0; i--) {
var div = document.createElement("div");
div.innerHTML = "<!--[if IE " + i + "]><span></span><![endif]-->";
if (div.getElementsByTagName("span").length) {
return i;
}
}
}
return undefined;
})();