Internet Explorer - 在没有库的JavaScript中检查IE小于9的最佳方法
internet explorer - Best way to check for IE less than 9 in JavaScript without library
在不使用jQuery或任何附加库的情况下,在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+,因为除 IE 之外的每个主要浏览器都很早就支持addEventListener
方法。(Chrome、Firefox、Opera 和 Safari(MDN 参考。它目前在IE9中受支持,我们可以预期它将继续在这里得到支持。
使用条件注释,您可以创建一个脚本块,该脚本块仅在小于 9 的 IE 中执行。
<!--[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(它更快,因为它在生成标记之前检查文档模式值。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;
})();
var ie = !-[1,]; // true if IE less than 9
IE5,6,7,8支持此黑客。它在ie9 +中是固定的(因此它适合这个问题的要求(。此黑客适用于所有IE兼容模式。
工作原理:即引擎将带有空元素的数组(如这个 [,1](视为具有两个元素的数组,而不是其他浏览器认为只有一个元素。因此,当我们用 + 运算符将此数组转换为数字时,我们执行类似操作:(ie中的",1"/其他中的"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');
此链接包含有关检测 Internet Explorer 版本的相关信息:
http://tanalin.com/en/articles/ie-version-js/
例:
if (document.all && !document.addEventListener) {
alert('IE8 or older.');
}
正则表达式以快速而肮脏的方式执行此操作,并.match()
:
if (navigator.userAgent.match(/MSIE's(?!9.0)/)) {
// ie less than version 9
}
如果我是你,我会使用条件编译或特征检测。
这是另一种选择:
<!--[if lt IE 9]><!-->
<script>
var LTEIE8 = true;
</script>
<!--<![endif]-->
我喜欢迈克刘易斯的回答,但代码没有通过jslint,我无法理解时髦的while循环。我的用例是,如果小于或等于IE8,则放置浏览器不支持的消息。
这是一个基于Mike Lewis的jslint免费版本:
/*jslint browser: true */
/*global jQuery */
(function () {
"use strict";
var browserNotSupported = (function () {
var div = document.createElement('DIV');
// http://msdn.microsoft.com/en-us/library/ms537512(v=vs.85).aspx
div.innerHTML = '<!--[if lte IE 8]><I></I><![endif]-->';
return div.getElementsByTagName('I').length > 0;
}());
if (browserNotSupported) {
jQuery("html").addClass("browserNotSupported").data("browserNotSupported", browserNotSupported);
}
}());
它需要在 JavaScript 中完成吗?
如果没有,则可以使用特定于IE的条件注释语法:
<!--[if lt IE 9]><h1>Using IE 8 or lower</h1><![endif]-->
if (+(/MSIE's('d+)/.exec(navigator.userAgent)||0)[1] < 9) {
// IE8 or less
}
- 提取IE版本:
/MSIE's('d+)/.exec(navigator.userAgent)
- 如果是非IE浏览器,这将返回
null
因此在这种情况下||0
会将该null
切换到0
-
[1]
将获得IE的主要版本,如果不是IE浏览器,则undefined
- 前导
+
会将其转换为数字,undefined
将转换为NaN
- 将
NaN
与数字进行比较将始终返回false
你们都试图使这些简单的事情过于复杂。只需使用简单明了的 JScript 条件注释。它是最快的,因为它向非 IE 浏览器添加了零代码以进行检测,并且它的兼容性可以追溯到支持 HTML 条件注释之前的 IE 版本。总之
var IE_version=(-1/*@cc_on,@_jscript_version@*/);
当心缩小器:大多数(如果不是全部(会将特殊条件注释误认为常规注释,并将其删除
基本上,上面的代码将 IE_version 的值设置为您正在使用的 IE 版本,或者 -1 f 您不使用 IE。现场演示:
var IE_version=(-1/*@cc_on,@_jscript_version@*/);
if (IE_version!==-1){
document.write("<h1>You are using Internet Explorer " + IE_version + "</h1>");
} else {
document.write("<h1>You are not using a version of Internet Explorer less than 11</h1>");
}
- 如何检查设备是Windows Surface Tablet,浏览器是Chrome还是IE
- 支持 JavaScript 的检查例程适用于 Chrome/Opera/IE,但不适用于 Firefox/Safari
- IE版本检查停止工作
- 检查用户是否正在使用 IE
- PHP/JavaScript 检查/取消检查在 FF 中工作,但在 IE 中不起作用
- 如何在IE检查块中加载js文件
- 有没有办法使用 JS 来检查 IE 智能屏幕是否打开
- 如何在IE 11 (IE 11)中检查第三方插件的版本
- jQuery脚本,用于检查输入是否有任何值.IE 和 Chrome 中的问题
- 检查用户是否正在使用具有兼容模式的IE
- jQuery检查文件扩展名在IE中不起作用
- 使用javascript检查所有复选框在IE中不起作用
- 检查会话在IE中不起作用
- 检查IE与否的快速、虚假、真实的方式
- 检查浏览器id是否为ie
- 介绍如何在perl中检查浏览器是否为IE
- IE条件检查
- 如何检查IE 6/7/8中是否安装了扩展(BHO) ?
- Ie /chrome检查器导致重画
- 当拼写检查打开时,上下文菜单事件在ie上不起作用