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

我想将我们网站的用户退回到错误页面,如果他们使用的是 v9 之前的版本。只是不值得我们花时间和精力来支持。所有其他非IE浏览器的用户都很好,不应该被退回。以下是建议的代码:Internet ExplorerIE pre-v9

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. 是的,我知道有人试图使用(或>= 20)访问该网站,不会将“badBrowser”设置为true,并且警告页面将无法正确显示。这是我们愿意承担的风险。IE v1
  4. 是的,我知道微软有“条件注释”,可用于精确的浏览器版本检测。IE 不再支持条件注释,使此方法绝对无用。IE 10

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


答案 1

这是我首选的方式。它提供了最大的控制。(注意:仅在 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));

感谢保罗·爱尔兰


答案 2

返回IE版本,否则IE返回错误

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
}