bcm*_*bcm 77 javascript browser internet-explorer browser-detection
在没有使用jQuery或任何附加库的情况下,在JavaScript中检测浏览器IE和版本低于9的最快,最短(最佳)方法是什么?
Mik*_*wis 118
使用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;
}());
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
ie < 9
Run Code Online (Sandbox Code Playgroud)
来自这里的James Panolsey:http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments
vec*_*tor 99
物有所值:
if( document.addEventListener ){
alert("you got IE9 or greater");
}
Run Code Online (Sandbox Code Playgroud)
这成功地针对IE 9+,因为该addEventListener方法很早就支持每个主流浏览器,但IE.(Chrome,Firefox,Opera和Safari)MDN参考.它目前在IE9中得到支持,我们可以预期它将继续得到支持.
Yah*_*hel 27
使用条件注释,您可以创建一个仅在小于9的IE中执行的脚本块.
<!--[if lt IE 9 ]>
<script>
var is_ie_lt9 = true;
</script>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)
当然,你可以在这个块之前加上一个声明的通用块,var is_ie_lt9=false这将覆盖IE小于9的值.(在这种情况下,你需要删除var声明,因为它会重复).
编辑:这是一个不依赖于内联脚本块的版本(可以从外部文件运行),但不使用用户代理嗅探:
通过@cowboy:
with(document.createElement("b")){id=4;while(innerHTML="<!--[if gt IE "+ ++id+"]>1<![endif]-->",innerHTML>0);var ie=id>5?+id:0}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ahn 10
bah有条件的评论!条件代码一路!!! (愚蠢的IE)
<script type="text/javascript">
/*@cc_on
var IE_LT_9 = (@_jscript_version < 9);
@*/
</script>
Run Code Online (Sandbox Code Playgroud)
但是说真的,只要把它扔到那里以防它更适合你...它们是同一个东西,这可以只是在.js文件而不是内联HTML
注意:这里的jscript_version检查为"9"完全是巧合.将其设置为8,7等不会检查"是IE8",您需要查找这些浏览器的jscript版本.
以下是对James Padolsey解决方案的改进:
1)它不会污染内存(例如,当检测到IE11时,James的代码片段会创建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;
})();
Run Code Online (Sandbox Code Playgroud)
var ie = !-[1,]; // true if IE less than 9
Run Code Online (Sandbox Code Playgroud)
ie5,6,7,8支持这种黑客攻击.它固定在ie9 +(所以它适合这个问题的要求).此hack适用于所有IE兼容模式.
它是如何工作的:即引擎处理带有空元素的数组(如此[,1])作为带有两个元素的数组,而其他浏览器则认为只有一个元素.因此,当我们使用+运算符将此数组转换为数字时,我们会执行以下操作:(',1'在ie /'1'在其他情况下)*1,我们在ie中获得NaN,在其他中获得1.然后用!将它转换为布尔值和反向值.简单.顺便说一句,我们可以使用更短的版本!标志,但价值将被逆转.
这是目前最短的黑客攻击.我是作者;)
我决定改用对象检测.
阅读本文后: http ://www.quirksmode.org/js/support.html和此:http: //diveintohtml5.ep.io/detect.html#canvas
我会用类似的东西
if(!!document.createElement('canvas').getContext) alert('what is needed, supported');
Run Code Online (Sandbox Code Playgroud)
此链接包含有关检测Internet Explorer版本的相关信息:
http://tanalin.com/en/articles/ie-version-js/
例:
if (document.all && !document.addEventListener) {
alert('IE8 or older.');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108443 次 |
| 最近记录: |