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 はまだコード 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
}

ポリフィルをインストールするだけで、最初に確認しなくても古いバージョンの IE で使用できるようにする方がクリーンな場合があります。Google検索で見つけることができる利用可能なそれらの数があります。ここに1つあります:

// 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

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 に答える
0

HTML ではなく、javascript 内でチェックすることで、これを最適に行うことができます。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 に答える