在没有库的JavaScript中检查IE小于9的最佳方法
在不使用jQuery或任何附加库的情况下,您最快、最短(最佳)的检测浏览器IE和JavaScript版本低于9的方法是什么?JavaScript在没有库的JavaScript中检查IE小于9的最佳方法,javascript,internet-explorer,browser,browser-detection,Javascript,Internet Explorer,Browser,Browser Detection,在不使用jQuery或任何附加库的情况下,您最快、最短(最佳)的检测浏览器IE和JavaScript版本低于9的方法是什么?JavaScript var ie = (function(){ var undef, v = 3, div = document.createElement('div'), all = div.getElementsByTagName('i'); while ( div.innerHTML
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;
}());
var ie=(函数(){
var undef,
v=3,
div=document.createElement('div'),
all=div.getElementsByTagName('i');
当(
div.innerHTML=“”,
全部[0]
);
返回v>4?v:未定义;
}());
然后,您可以执行以下操作:
ie < 9
ie<9
作者:James Panolsey从这里开始:您可以使用正则表达式和
.match()
:
是否需要用JavaScript来完成 如果没有,则可以使用IE特定的条件注释语法:
<!--[if lt IE 9]><h1>Using IE 8 or lower</h1><![endif]-->
使用条件注释,您可以创建一个脚本块,该脚本块只能在小于9的IE中执行
<!--[if lt IE 9 ]>
<script>
var is_ie_lt9 = true;
</script>
<![endif]-->
呸,有条件的评论!条件代码一路走来!!!(胡说)
/*@抄送
变量IE_LT_9=(@_jscript_版本<9);
@*/
说真的,把这个扔出去,以防它更适合你。。。它们是一样的,可以放在.js文件中,而不是内联HTML中
注意:这里jscript_版本检查是“9”,这完全是巧合。将其设置为8、7等将不会检查“is IE8”,您需要查找这些浏览器的jscript版本。我决定改为使用对象检测 读完这篇文章: 这是: 我会用像这样的东西
if(!!document.createElement('canvas').getContext) alert('what is needed, supported');
如果我是你,我会使用或特征检测。还有另一种选择:
<!--[if lt IE 9]><!-->
<script>
var LTEIE8 = true;
</script>
<!--<![endif]-->
var LTEIE8=真;
了解它的价值:
if( document.addEventListener ){
alert("you got IE9 or greater");
}
这成功地将IE9+作为目标,因为除了IE(Chrome、Firefox、Opera和Safari)之外,每个主要浏览器都很早就支持了
addEventListener
方法。IE9目前支持它,我们可以期待它在这里继续得到支持。此链接包含有关检测Internet Explorer版本的相关信息:
例如:
if(document.all&&!document.addEventListener){
警报(“IE8或更早版本”);
}
我喜欢Mike Lewis的答案,但代码没有通过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);
}
}());
/*jslint浏览器:true*/
/*全局jQuery*/
(功能(){
“严格使用”;
var browserNotSupported=(函数(){
var div=document.createElement('div');
// http://msdn.microsoft.com/en-us/library/ms537512(v=vs.85).aspx
div.innerHTML='';
返回div.getElementsByTagName('I')。长度>0;
}());
如果(浏览器不受支持){
jQuery(“html”).addClass(“browserNotSupported”).data(“browserNotSupported”,browserNotSupported);
}
}());
以下是对James Padolsey解决方案的改进:
1) 它不会污染内存(例如,当检测到IE11时,James的代码片段会创建7个未移动的文档片段)。2) 它更快,因为它在生成标记之前检查documentMode值
3) 它更易读,特别是对于初学JavaScript的程序员 主要链接:
/*
-行为:对于IE8+,我们检测Microsoft提供的documentMode值。
-行为:为0;我——){
var div=document.createElement(“div”);
div.innerHTML=“”;
if(div.getElementsByTagName(“span”).length){
返回i;
}
}
}
返回未定义;
})();
ie5、6、7、8支持这种黑客行为。它在ie9+中是固定的(因此它适合这个问题的要求)。这项技术适用于所有IE兼容模式 工作原理:ie引擎将带有空元素的数组(如[,1])视为带有两个元素的数组,而其他浏览器认为只有一个元素。因此,当我们用+运算符将这个数组转换为数字时,我们会这样做:('1'在ie中/'1'在其他中)*1,我们在ie中得到NaN,在其他中得到1。然后我们将其转换为布尔值并使用!反转值!。简单。顺便说一句,我们可以使用较短的版本,而不需要!符号,但值将被反转 这是迄今为止最短的黑客攻击。我是作者;)
if(+(/MSIE\s(\d+)/.exec(navigator.userAgent)| | 0)[1]<9){
//IE8或以下
}
- 使用以下命令提取IE版本:
/MSIE\s(\d+)/.exec(navigator.userAgent)
- 如果是非IE浏览器,它将返回
,因此在这种情况下null
将|124; 0
切换到null
0
将获得IE的主要版本,或者[1]
如果它不是IE浏览器未定义
- 前导的
将其转换为数字,+
未定义的
将转换为
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@*/);
如果(IE_版本!=-1){
编写(“您正在使用Internet Explorer”+IE_version+”);
}否则{
编写(“您使用的Internet Explorer版本不低于11”);
}
JavaScript解决方案,不在DOMI中,我完全知道
if( document.addEventListener ){
alert("you got IE9 or greater");
}
/*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);
}
}());
/*
- 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
var IE_version=(-1/*@cc_on,@_jscript_version@*/);