5

如果浏览器不是 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]-->

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

请不要使用 jQuery。

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

4

3 回答 3

5

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

if (document.getElementsByClassName) {
    // code here that uses getElementsByClassName
} else {
    // code here that doesn't use getElementsByClassName
}

只安装一个 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;
  }
}
于 2012-09-21T21:11:34.333 回答
0

您可以通过在 javascript 中检查而不是在 HTML 中进行检查来做到这一点。在 JS 中,您有一个属性navigator.userAgent,它为每个浏览器(甚至 IE 在其不同的兼容版本中)返回一个唯一的字符串。所以我建议在所有浏览器中执行整个 JS 块并简单地添加类似这样的内容添加它的顶部:

if(navigator.userAgent.indexOf('MSIE 9.0') !== -1)
{
  // call IE9 specific method
}
else
{
  // call method for other browsers
}

有关更复杂的方法,请参阅这篇文章navigator.userAgent

于 2012-09-21T19:12:07.523 回答
0

正如 jfriend00 所说,特征检测可能是更好的解决方案,但这里是满足您要求的条件注释。

<!--[if gte IE 9]> -->
    <script type="text/javascript"> alert('ie9+ and not ie') </script>
<!-- <![endif]-->
<!--[if lt IE 9]>
    <script type="text/javascript"> alert(' < ie9') </script>
<![endif]-->

http://jsfiddle.net/szF4J/1/

于 2012-09-21T20:46:02.983 回答