在JavaScript中检测IE版本(v9之前的版本)


246

如果他们使用的是Internet Explorerv9之前的版本,我想将我们网站的用户退回至错误页面。只是不值得我们花费时间和金钱来支持IE pre-v9。使用其他所有非IE浏览器的用户都可以使用,并且不应被退回。这是建议的代码:

if(navigator.appName.indexOf("Internet Explorer")!=-1){     //yeah, he's using IE
    var badBrowser=(
        navigator.appVersion.indexOf("MSIE 9")==-1 &&   //v9 is ok
        navigator.appVersion.indexOf("MSIE 1")==-1  //v10, 11, 12, etc. is fine too
    );

    if(badBrowser){
        // navigate to error page
    }
}

这段代码会成功吗?

拒绝一些可能会以我的方式发表的评论:

  1. 是的,我知道用户可以伪造useragent字符串。我不担心
  2. 是的,我知道编程专家更喜欢嗅探功能支持而不是浏览器类型,但在这种情况下,我认为这种方法不可行。我已经知道所有(相关)非IE浏览器都支持我需要的功能,而所有pre-v9 IE浏览器都不支持。在整个站点中逐个功能地检查将是浪费。
  3. 是的,我知道有人尝试使用IE v1(或> = 20)访问该网站不会将'badBrowser'设置为true,并且警告页面也无法正确显示。这是我们愿意承担的风险。
  4. 是的,我知道Microsoft具有可用于精确浏览器版本检测的“条件注释”。从IE开始,IE不再支持条件注释IE 10,从而使该方法绝对无用。

还有其他明显的问题要注意吗?


122
“仅支持IE 9之前的版本就不值得我们花费时间和金钱”。我希望我能做到。
哈桑(2012年

2
基于点[2]我不会建议Modernizr的(en.wikipedia.org/wiki/Modernizr) -每个人都画在沙某处线-但IE9似乎像一个高一线
amelvin

1
条件注释只是普通注释。只有IE会将它们解释为特殊的。IE10 +将不再这样做。
安德烈亚斯(Andreas)

3
IE 10将条件注释与非IE浏览器完全相同。它们是有效的HTML注释,因此将被视为此类。我同意Andreas的看法,并认为有条件的评论是必经之路。
蒂姆·唐

1
表示IE10 +的官方文档不支持条件注释:blogs.msdn.com/b/ie/archive/2011/07/06/…-感谢:stackoverflow.com/a/9900331/320399
blong

Answers:


354

这是我的首选方式。它提供了最大的控制权。(注意:仅IE5-9支持条件语句。)

首先正确设置您的ie类

<!DOCTYPE html>
<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>    <html class="lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>    <html class="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->    
<head>

然后,您可以仅使用CSS来创建样式异常,或者,如果需要,可以添加一些简单的JavaScript:

(function ($) {
    "use strict";

    // Detecting IE
    var oldIE;
    if ($('html').is('.lt-ie7, .lt-ie8, .lt-ie9')) {
        oldIE = true;
    }

    if (oldIE) {
        // Here's your JS for IE..
    } else {
        // ..And here's the full-fat code for everyone else
    }

}(jQuery));

感谢Paul Irish


21
鉴于OP要求使用纯JavaScript解决方案,我相信下面@Tim Down的答案会更好,因为它不涉及更改现有HTML,而且不使用jQuery:stackoverflow.com/a/10965203/134120
AsGoodAsItGets 2015年

我在w3 html验证程序上收到此错误:Error: Saw <!-- within a comment. Probable cause: Nested comment (not allowed). At line 5, column 21 if gt IE 8]><!--><html
abumalick

161

返回IE版本,否则返回false

function isIE () {
  var myNav = navigator.userAgent.toLowerCase();
  return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

例:

if (isIE () == 8) {
 // IE8 code
} else {
 // Other versions IE or not IE
}

要么

if (isIE () && isIE () < 9) {
 // is IE version less than 9
} else {
 // is IE 9 and later or not IE
}

要么

if (isIE()) {
 // is IE
} else {
 // Other browser
}

36
不适用于IE11。从IE 11开始,他们将UA字符串更改为"mozilla/5.0 (windows nt 6.3; wow64; trident/7.0; .net4.0e; .net4.0c; media center pc 6.0; .net clr 3.5.30729; .net clr 2.0.50727; .net clr 3.0.30729; rv:11.0) like gecko"
安妮

22
请注意,在FF中,“ false <9”为“ true”。因此,条件应为if (isIE () && isIE () < 9) {
nZeus

3
@DeadlyChambers也许以IE7标准模式运行?msdn.microsoft.com/zh-CN/library/ie/cc196988(v=vs.85).aspx
mason81

4
批准的答案是如何检测HTML中的IE版本。这回答了原始问题。
马特·瓦格纳

2
@PrasadGayan-Microsoft Edge不是Internet Explorer。因此,返回false似乎是正确的做法。
BryanGrezeszak

120

如果没有其他人添加addEventLister-method并且您使用的是正确的浏览器模式,则可以使用以下命令检查IE 8或更低版本

if (window.attachEvent && !window.addEventListener) {
    // "bad" IE
}

旧版Internet Explorer和attachEvent(MDN)


7
这似乎是完全用JavaScript检测IE <= 8的最有效方法-对于像我这样寻求方法的人来说非常有用。
Gregory Magarshak

大!这也检测到我一直在寻找的Quirks模式下的IE9。
sstur 2014年

7
尽管这是一个“易于使用”的解决方案,但它存在一些风险。公司中的任何人(不知道您的解决方案)都可以实现“ addEventListener”或“ attachEvent”,以解决IE 8中缺少它的问题。然后,您的代码将停止工作。
泽·卡洛斯

@RoyiNamir这是针对IE8的测试。为什么在IE11上它应该返回true?
Andreas

@Andreas哎呀。没有看到OP要在ie9之前想要。删除。
罗伊·纳米尔

114

使用条件注释。您正在尝试检测IE <9的用户,并且条件注释将在这些浏览器中起作用;在其他浏览器(IE> = 10和非IE)中,这些注释将被视为普通的HTML注释。

HTML示例:

<!--[if lt IE 9]>
WE DON'T LIKE YOUR BROWSER
<![endif]-->

如果需要,您也可以仅使用脚本来执行此操作:

var div = document.createElement("div");
div.innerHTML = "<!--[if lt IE 9]><i></i><![endif]-->";
var isIeLessThan9 = (div.getElementsByTagName("i").length == 1);
if (isIeLessThan9) {
    alert("WE DON'T LIKE YOUR BROWSER");
}

5
@Tim Down的答案的JavaScript版本对我来说非常有效。我使用BrowserStack在Windows 7和IE 8、9、10和11上对其进行了测试;装有Safari 5.1,Firefox 28.0,Chrome 33.0和Opera 20.0的Mac OS X Snow Leopard;iPhone 5移动版Safari;和Android Samsung Galaxy Tab 2 10.1 4.0。不出所料,只有IE8报告它是IeLessThan9。真好!
史蒂夫·萨波特塔2014年

58

要轻松检测MSIE(v6-v7-v8-v9-v10-v11):

if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
   // MSIE
}

由于它不支持条件注释,因此对检测IE10很有用。在IE11中不起作用,但IE11通常具有正常行为
personne3000

11
最后,一个没有讲授有关使用特征检测的答案,实际上是回答了这个问题。
cdmckay 2014年

32

这是AngularJS 检查 IE的方式

/**
 * documentMode is an IE-only property
 * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
 */
var msie = document.documentMode;

if (msie < 9) {
    // code for IE < 9
}

哇,这比所有条件注释都简单得多!没有限制吗?
andrewb

根据文档,IE8 +支持此属性,因此我认为在大多数情况下应该足够了。
iurii

根据MSDN参考,“当尚未确定当前文档时,documentMode返回的值为零(0)。通常在加载文档时发生。” 这是否意味着您可能无法在<head>加载的脚本内得到有效的响应?
Erik Knowles

我认为您可以通过在文档已加载时检查window.onload上的值来解决此问题。
iurii


19

使用功能检测来检测IE版本(IE6 +,将IE6之前的浏览器检测为6,对于非IE浏览器返回null):

var ie = (function (){
    if (window.ActiveXObject === undefined) return null; //Not IE
    if (!window.XMLHttpRequest) return 6;
    if (!document.querySelector) return 7;
    if (!document.addEventListener) return 8;
    if (!window.atob) return 9;
    if (!document.__proto__) return 10;
    return 11;
})();

编辑:为方便起见,我创建了一个bower / npm回购协议:ie-version

更新:

更紧凑的版本可以写成一行:

return window.ActiveXObject === undefined ? null : !window.XMLHttpRequest ? 6 : !document.querySelector ? 7 : !document.addEventListener ? 8 : !window.atob ? 9 : !document.__proto__ ? 10 : 11;

16

undefined如果浏览器不是Internet Explorer ,则此函数将以整数形式返回IE主版本号。像所有用户代理解决方案一样,这容易受到用户代理欺骗的影响(自版本8开始,这就是IE的正式功能)。

function getIEVersion() {
    var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:)(\d+)/);
    return match ? parseInt(match[1]) : undefined;
}

欧文,在实践中如何使用它?如何获取返回值?我想console.log(!!match && parseInt(match[1]))console.log(parseInt(match[1]))console.log(match),但其中任何一个没有结果。
2014年

通过调用函数本身获取返回值getIEVersion()。例如:if (getIEVersion() < 9) {/* IE 8 or below */} if (!getIEVersion()) {/* Not IE */}
Owen

15

使用条件注释在JS中检测IE

// ----------------------------------------------------------
// A short snippet for detecting versions of IE in JavaScript
// without resorting to user-agent sniffing
// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
//     ie === undefined
// If you're in IE (>=5) then you can determine which version:
//     ie === 7; // IE7
// Thus, to detect IE:
//     if (ie) {}
// And to detect the version:
//     ie === 6 // IE6
//     ie > 7 // IE8, IE9 ...
//     ie < 9 // Anything less than IE9
// ----------------------------------------------------------

// UPDATE: Now using Live NodeList idea from @jdalton

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;

}());

这几乎与我的回答相同。
Tim Down

@TimDown:也许吧,但是这个答案有点功能完善(它告诉您版本号),而且评论很好。此外,此答案开头的链接会导致Gist,其中包含一些翔实的评论以及对该技术的有趣变化。
艾伦

@艾伦:公平点。我针对这个问题量身定制了我的产品,但未提供消息来源。
Tim Down'1

12

这对我有用。我将其用作重定向到页面的页面,该页面解释了为什么我们不喜欢<IE9并提供指向我们喜欢的浏览器的链接。

<!--[if lt IE 9]>
<meta http-equiv="refresh" content="0;URL=http://google.com">
<![endif]-->

1
哦,那真是令人讨厌。我使用一种更友好的方法,显示带有IE警告的外观的div,当访问者单击它时,用户将进入browserhappy.com
Codebeat 2015年

10

您的代码可以执行检查,但是如您所想,如果有人尝试使用IE v1或> v19访问您的页面,则不会收到错误,因此使用Regex表达式进行检查可能更安全,例如以下代码:

var userAgent = navigator.userAgent.toLowerCase();
// Test if the browser is IE and check the version number is lower than 9
if (/msie/.test(userAgent) && 
    parseFloat((userAgent.match(/.*(?:rv|ie)[\/: ](.+?)([ \);]|$)/) || [])[1]) < 9) {
  // Navigate to error page
}

这不是一个好答案。UA嗅探是不可靠的。有关更多信息,请访问:modernizr.com/docs
Jezen Thomas

3
@Jezen有时UA嗅探是必经之路:github.com/Modernizr/Modernizr/issues/538
–IstvánUjj-

8

Microsoft参考页所述,从版本10开始,IE中不再支持条件注释。

var ieDetector = function() {
  var browser = { // browser object

      verIE: null,
      docModeIE: null,
      verIEtrue: null,
      verIE_ua: null

    },
    tmp;

  tmp = document.documentMode;
  try {
    document.documentMode = "";
  } catch (e) {};

  browser.isIE = typeof document.documentMode == "number" || eval("/*@cc_on!@*/!1");
  try {
    document.documentMode = tmp;
  } catch (e) {};

  // We only let IE run this code.
  if (browser.isIE) {
    browser.verIE_ua =
      (/^(?:.*?[^a-zA-Z])??(?:MSIE|rv\s*\:)\s*(\d+\.?\d*)/i).test(navigator.userAgent || "") ?
      parseFloat(RegExp.$1, 10) : null;

    var e, verTrueFloat, x,
      obj = document.createElement("div"),

      CLASSID = [
        "{45EA75A0-A269-11D1-B5BF-0000F8051515}", // Internet Explorer Help
        "{3AF36230-A269-11D1-B5BF-0000F8051515}", // Offline Browsing Pack
        "{89820200-ECBD-11CF-8B85-00AA005B4383}"
      ];

    try {
      obj.style.behavior = "url(#default#clientcaps)"
    } catch (e) {};

    for (x = 0; x < CLASSID.length; x++) {
      try {
        browser.verIEtrue = obj.getComponentVersion(CLASSID[x], "componentid").replace(/,/g, ".");
      } catch (e) {};

      if (browser.verIEtrue) break;

    };
    verTrueFloat = parseFloat(browser.verIEtrue || "0", 10);
    browser.docModeIE = document.documentMode ||
      ((/back/i).test(document.compatMode || "") ? 5 : verTrueFloat) ||
      browser.verIE_ua;
    browser.verIE = verTrueFloat || browser.docModeIE;
  };

  return {
    isIE: browser.isIE,
    Version: browser.verIE
  };

}();

document.write('isIE: ' + ieDetector.isIE + "<br />");
document.write('IE Version Number: ' + ieDetector.Version);

然后使用:

if((ieDetector.isIE) && (ieDetector.Version <= 9))
{

}

1
这是唯一可以在整个网络上运行的功能,至少是我尝试过的功能... thx;)
Henrique C.

这段代码不错,但是无法检测到兼容性视图模式。我在IE 11上使用IE 8中的兼容性视图,并且此代码仍提供version 11编辑:此代码令人惊讶!哈哈,它给了一个里面所有东西的物体。版本是11,但docModeIR等于9。谢谢!
MarceloBarbosa 2015年

5

对于10和11:

您可以使用js并在html中添加一个类来维护条件注释的标准:

  var ua = navigator.userAgent,
      doc = document.documentElement;

  if ((ua.match(/MSIE 10.0/i))) {
    doc.className = doc.className + " ie10";

  } else if((ua.match(/rv:11.0/i))){
    doc.className = doc.className + " ie11";
  }

或使用类似Bowser的库:

https://github.com/ded/bowser

或modernizr用于特征检测:

http://modernizr.com/


2
我尝试了一些脚本和解决方案,但没有任何效果。然后,我在项目中加入了Bowser,它才起作用。因此,建议使用凉亭。
2015年

3

要检测Internet Explorer 10 | 11,可以在body标记后立即使用以下小脚本:

就我而言,我使用的是装在头部的jQuery库。

<!DOCTYPE HTML>
<html>
<head>
    <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
</head>
<body>
    <script>if (navigator.appVersion.indexOf('Trident/') != -1) $("body").addClass("ie10");</script>
</body>
</html>

我喜欢这个谢谢,我只需要检测10或11,因为我不支持以前的版本
Nearpoint 2014年

IE9也是三叉戟,但CSS支持却不一样。您的检测结果认为至少为10,但这是不正确的。
Codebeat


2
var Browser = new function () {
    var self = this;
    var nav = navigator.userAgent.toLowerCase();
    if (nav.indexOf('msie') != -1) {
        self.ie = {
            version: toFloat(nav.split('msie')[1])
        };
    };
};


if(Browser.ie && Browser.ie.version > 9)
{
    // do something
}

2

根据Microsoft的说法,以下是最佳解决方案,它也非常简单:

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer')
    {
        var ua = navigator.userAgent;
        var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat( RegExp.$1 );
    }
    return rv;
}

function checkVersion()
{
    var msg = "You're not using Internet Explorer.";
    var ver = getInternetExplorerVersion();

    if ( ver > -1 )
    {
        if ( ver >= 8.0 ) 
            msg = "You're using a recent copy of Internet Explorer."
        else
            msg = "You should upgrade your copy of Internet Explorer.";
      }
    alert( msg );
}

确实,以防万一其他人试图使用上面的方法,后来的答案中的代码确实适用于IE11(stackoverflow.com/a/26375930/1129926)。但是请注意,它是否适用于IE12等?最重要的是,最好将它们视为临时黑客,随着新浏览器版本的发布,它们很可能在以后失败(我什至不会提到Edge)。
杰夫·梅格勒

1

我建议您不要在第十次重写此代码。我建议您使用Conditionizr库(http://conditionizr.com/),该库能够测试特定的IE版本以及其他浏览器,操作系统,甚至是否存在Retina显示屏。

仅包含您需要的特定测试的代码,您还可以获得经过多次迭代(并且很容易在不破坏代码的情况下进行升级)的经过测试的库的好处。

它还与Modernizr紧密配合,Modernizr可以处理所有这些情况,这些情况中您最好测试特定功能而不是特定浏览器。


1

我喜欢这样:

<script>
   function isIE () {
       var myNav = navigator.userAgent.toLowerCase();
       return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
   }    
   var ua = window.navigator.userAgent;
   //Internet Explorer | if | 9-11

   if (isIE () == 9) {
       alert("Shut down this junk! | IE 9");
   } else if (isIE () == 10){
       alert("Shut down this junk! | IE 10");
   } else if (ua.indexOf("Trident/7.0") > 0) {
       alert("Shut down this junk! | IE 11");
   }else{
       alert("Thank god it's not IE!");
   }

</script>

1

这种检测IE的方法结合了优点,避免了使用条件注释的jKey答案和使用用户代理的Owen的答案的缺点。

  • jKey的方法适用于版本9,并且不受IE 8和9中用户代理的欺骗。
  • Owen的方法可能无法在IE 5和6(报告7)上失败,并且容易受到UA欺骗的影响,但是它可以检测到IE版本> = 10(现在还包括12,这是Owen的回答的日期)。

    // ----------------------------------------------------------
    // A short snippet for detecting versions of IE
    // ----------------------------------------------------------
    // If you're not in IE (or IE version is less than 5) then:
    //     ie === undefined
    // Thus, to detect IE:
    //     if (ie) {}
    // And to detect the version:
    //     ie === 6 // IE6
    //     ie > 7 // IE8, IE9 ...
    // ----------------------------------------------------------
    var ie = (function(){
        var v = 3,
            div = document.createElement('div'),
            all = div.getElementsByTagName('i');
    
        while (
            div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
            all[0]
        );
        if (v <= 4) { // Check for IE>9 using user agent
            var match = navigator.userAgent.match(/(?:MSIE |Trident\/.*; rv:|Edge\/)(\d+)/);
            v = match ? parseInt(match[1]) : undefined;
        }
        return v;
    }());

这可以用来为包含IE版本的文档设置有用的类:

    if (ie) {
        document.documentElement.className += ' ie' + ie;
        if (ie < 9)
            document.documentElement.className += ' ieLT9';
    }

请注意,如果IE处于兼容模式,它将检测到正在使用的兼容模式。还要注意,IE版本对于较旧的版本(<10)最有用。更高的版本更符合标准,最好使用modernizr.js之类的功能来检查功能。


1

为此,我做了一个方便的下划线混合。

_.isIE();        // Any version of IE?
_.isIE(9);       // IE 9?
_.isIE([7,8,9]); // IE 7, 8 or 9?

_.mixin({
  isIE: function(mixed) {
    if (_.isUndefined(mixed)) {
      mixed = [7, 8, 9, 10, 11];
    } else if (_.isNumber(mixed)) {
      mixed = [mixed];
    }
    for (var j = 0; j < mixed.length; j++) {
      var re;
      switch (mixed[j]) {
        case 11:
          re = /Trident.*rv\:11\./g;
          break;
        case 10:
          re = /MSIE\s10\./g;
          break;
        case 9:
          re = /MSIE\s9\./g;
          break;
        case 8:
          re = /MSIE\s8\./g;
          break;
        case 7:
          re = /MSIE\s7\./g;
          break;
      }

      if (!!window.navigator.userAgent.match(re)) {
        return true;
      }
    }

    return false;
  }
});

console.log(_.isIE());
console.log(_.isIE([7, 8, 9]));
console.log(_.isIE(11));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>


1

或简单地

//   IE 10: ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'; 
//   IE 11: ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; 
// Edge 12: ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0'; 
// Edge 13: ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'; 

var isIE = navigator.userAgent.match(/MSIE|Trident|Edge/)
var IEVersion = ((navigator.userAgent.match(/(?:MSIE |Trident.*rv:|Edge\/)(\d+(\.\d+)?)/)) || []) [1]

0

我发现用于检查IE版本的最全面的JS脚本是http://www.pinlady.net/PluginDetect/IE/。整个库位于http://www.pinlady.net/PluginDetect/Browsers/

使用IE10,不再支持条件语句。

使用IE11,用户代理不再包含MSIE。同样,使用用户代理也不可靠,因为可以对其进行修改。

使用PluginDetect JS脚本,可以通过使用针对特定IE版本的非常具体且精心设计的代码来检测IE并检测确切版本。当您确切关心要​​使用的浏览器版本时,这非常有用。


0

我知道我在这里参加聚会有点晚了,但是我一直在检查一种简单的单行方式来提供有关浏览器是否是IE以及从10开始是什么版本的反馈。我没有为版本11编写代码,因此可能需要对此进行一些修改。

但是,这是代码,它作为具有属性和方法的对象来工作,并且依赖于对象检测,而不是抓取导航器对象(由于存在欺骗性,因此存在很大缺陷)。

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

用法是isIE.browser一个返回布尔值并依赖条件注释的属性,该方法isIE.detectedVersion()返回5到10之间的一个数字。我假设任何低于6的值都在认真的守旧派中,并且比一班班轮和任何高于10的班轮,您就进入了较新的领域。我已经阅读了有关IE11的一些信息,但不支持条件注释,但我还没有进行全面调查,这可能是以后的事情。

无论如何,对于一个衬里而言,它将涵盖IE浏览器和版本检测的基础知识。它远非完美,但体积小且易于修改。

仅供参考,如果对如何实际实现此方法有任何疑问,则以下条件应有所帮助。

var isIE = { browser:/*@cc_on!@*/false, detectedVersion: function () { return (typeof window.atob !== "undefined") ? 10 : (typeof document.addEventListener !== "undefined") ? 9 : (typeof document.querySelector !== "undefined") ? 8 : (typeof window.XMLHttpRequest !== "undefined") ? 7 : (typeof document.compatMode !== "undefined") ? 6 : 5; } };

/* testing IE */

if (isIE.browser) {
  alert("This is an IE browser, with a detected version of : " + isIE.detectedVersion());
}

0

检测IE及其版本再简单不过了,您所需要的只是一些本机/原始Javascript:

var uA = navigator.userAgent;
var browser = null;
var ieVersion = null;

if (uA.indexOf('MSIE 6') >= 0) {
    browser = 'IE';
    ieVersion = 6;
}
if (uA.indexOf('MSIE 7') >= 0) {
    browser = 'IE';
    ieVersion = 7;
}
if (document.documentMode) { // as of IE8
    browser = 'IE';
    ieVersion = document.documentMode;
}

这是一种使用它的方式:

if (browser == 'IE' && ieVersion <= 9) 
    document.documentElement.className += ' ie9-';

适用于所有IE版本,包括具有较低兼容性视图/模式的更高版本,并且documentMode是IE专有。


0

如果您需要选择IE浏览器版本,则可以遵循以下代码。此代码对于IE6到IE11版本都适用

<!DOCTYPE html>
<html>
<body>

<p>Click on Try button to check IE Browser version.</p>

<button onclick="getInternetExplorerVersion()">Try it</button>

<p id="demo"></p>

<script>
function getInternetExplorerVersion() {
   var ua = window.navigator.userAgent;
        var msie = ua.indexOf("MSIE ");
        var rv = -1;

        if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer, return version number
        {               
            if (isNaN(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))))) {
                //For IE 11 >
                if (navigator.appName == 'Netscape') {
                    var ua = navigator.userAgent;
                    var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
                    if (re.exec(ua) != null) {
                        rv = parseFloat(RegExp.$1);
                        alert(rv);
                    }
                }
                else {
                    alert('otherbrowser');
                }
            }
            else {
                //For < IE11
                alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))));
            }
            return false;
        }}
</script>

</body>
</html>

0

窗口运行IE10将自动更新到IE11 +,并将其标准化为W3C

如今,我们不需要支持IE8-

    <!DOCTYPE html>
    <!--[if lt IE 9]><html class="ie ie8"><![endif]-->
    <!--[if IE 9]><html class="ie ie9"><![endif]-->
    <!--[if (gt IE 9)|!(IE)]><!--><html><!--<![endif]-->
    <head>
        ...
        <!--[if lt IE 8]><meta http-equiv="Refresh" content="0;url=/error-browser.html"><![endif]--
        ...
    </head>

0
var isIE9OrBelow = function()
{
   return /MSIE\s/.test(navigator.userAgent) && parseFloat(navigator.appVersion.split("MSIE")[1]) < 10;
}

0
if (!document.addEventListener) {
    // ie8
} else if (!window.btoa) {
    // ie9
}
// others
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.