在没有库的JavaScript中检查IE小于9的最佳方法

在没有库的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

在不使用jQuery或任何附加库的情况下,您最快、最短(最佳)的检测浏览器IE和JavaScript版本低于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;

}());
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
  • [1]
    将获得IE的主要版本,或者
    未定义
    如果它不是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@*/);