如何根据浏览器有条件地运行Javascript?

Joh*_*oth 5 html javascript internet-explorer

如果浏览器不是IE或IE 9+,我想要运行一段Javascript.如果浏览器是IE8或更低版本,则应运行另一段Javascript.

我试图使用条件评论:

<!--[if (!IE)|(gte IE 9)]>
    <script type="text/javascript"> /* code 1 */ </script>
<![endif]-->

<!--[if (lt IE 9)]>
    <script type="text/javascript"> /* code 2 */ </script>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

但是IE6和IE7仍在执行代码1.Firefox正在执行代码2 ......

请不要jQuery.

编辑:实际上,我的条件表达式是错误的.但仍然选择了所选答案中提出的特征检测.

jfr*_*d00 5

从您的评论中,听起来您只是想确定是否可以使用document.getElementsByClassName().如果是这种情况,您可以使用如下特征检测:

if (document.getElementsByClassName) {
    // code here that uses getElementsByClassName
} else {
    // code here that doesn't use getElementsByClassName
}
Run Code Online (Sandbox Code Playgroud)

安装polyfill可能更干净,因此您可以在旧版本的IE中使用它而无需先检查.您可以通过Google搜索找到其中的一些.这是一个:

// Add a getElementsByClassName function if the browser doesn't have one
// Limitation: only works with one class name
// Copyright: Eike Send http://eike.se/nd
// License: MIT License

if (!document.getElementsByClassName) {
  document.getElementsByClassName = function(search) {
    var d = document, elements, pattern, i, results = [];
    if (d.querySelectorAll) { // IE8
      return d.querySelectorAll("." + search);
    }
    if (d.evaluate) { // IE6, IE7
      pattern = ".//*[contains(concat(' ', @class, ' '), ' " + search + " ')]";
      elements = d.evaluate(pattern, d, null, 0, null);
      while ((i = elements.iterateNext())) {
        results.push(i);
      }
    } else {
      elements = d.getElementsByTagName("*");
      pattern = new RegExp("(^|\\s)" + search + "(\\s|$)");
      for (i = 0; i < elements.length; i++) {
        if ( pattern.test(elements[i].className) ) {
          results.push(elements[i]);
        }
      }
    }
    return results;
  }
}
Run Code Online (Sandbox Code Playgroud)