Detect IE version (prior to v9) in JavaScript

前端 未结 30 2024
半阙折子戏
半阙折子戏 2020-11-22 08:44

I want to bounce users of our web site to an error page if they\'re using a version of Internet Explorer prior to v9. It\'s just not worth our time and money to

30条回答
  •  广开言路
    2020-11-22 08:45

    This approach to detecting IE combines the strengths and avoids the weaknesses of jKey's answer using conditional comments and Owen's answer using user agents.

    • jKey's approach works up to version 9 and immune to user agent spoofing in IE 8 & 9.
    • Owen's approach can fail on IE 5 & 6 (reporting 7) and is susceptible to UA spoofing, but it can detect IE versions >= 10 (now also including 12, which postdates Owen's answer).

      // ----------------------------------------------------------
      // 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 = '',
              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;
      }());
      

    This can be used to set useful classes to your document containing the IE version:

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

    Note that it detects the compatibility mode being used, if IE is in compatability mode. Also note that IE version is mostly useful for older versions (<10); higher versions are more standards-compliant and it's probably better to instead check for features using something like modernizr.js.

提交回复
热议问题