76

jQuery やアドオン ライブラリを使用せずに、JavaScript で IE およびバージョン 9 未満のブラウザを検出するための最速、最短 (最良) の方法は何でしょうか?

4

14 に答える 14

117

Javascript

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );

    return v > 4 ? v : undef;

}());

その後、次のことができます。

ie < 9

ここからJames Panolseyによる:http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments

于 2011-04-07T01:22:16.790 に答える
99

それが価値があるもののために:

    if(  document.addEventListener  ){
        alert("you got IE9 or greater");
    }

addEventListenerこのメソッドは、IE を除くすべての主要なブラウザーで非常に早い段階でサポートされていたため、IE 9 以降をターゲットにしています。(Chrome、Firefox、Opera、および Safari) MDN リファレンス。現在 IE9 でサポートされており、今後も引き続きサポートされることが期待できます。

于 2013-02-12T15:14:36.453 に答える
27

条件付きコメントを使用すると、IE 9 未満でのみ実行されるスクリプト ブロックを作成できます。

<!--[if lt IE 9 ]>
<script>
var is_ie_lt9 = true;
</script>
<![endif]--> 

もちろん、このブロックの前に を宣言するユニバーサル ブロックを配置することもできvar is_ie_lt9=falseます。これは 9 未満の IE ではオーバーライドされます (その場合、var繰り返しになるため、宣言を削除する必要があります)。

編集:インライン スクリプト ブロック (外部ファイルから実行可能) に依存しないが、ユーザー エージェント スニッフィングを使用しないバージョンを次に示します。

@カウボーイ経由:

with(document.createElement("b")){id=4;while(innerHTML="<!--[if gt IE "+ ++id+"]>1<![endif]-->",innerHTML>0);var ie=id>5?+id:0}
于 2011-04-07T01:23:14.080 に答える
10

条件付きコメントにバァ!ずっと条件付きコード!!! (愚かな IE)

<script type="text/javascript">
/*@cc_on
   var IE_LT_9 = (@_jscript_version < 9);
@*/
</script>

真剣に、それがあなたにより適している場合に備えて、これをそこに捨ててください...それらは同じものです。これは、インラインHTMLではなく.jsファイルにすることができます

注: ここで jscript_version チェックが「9」であるのはまったくの偶然です。8、7 などに設定すると、「is IE8」はチェックされません。これらのブラウザーの jscript バージョンを検索する必要があります。

于 2011-04-07T01:36:11.400 に答える
9

以下は、James Padolsey のソリューションを改善したものです。

1) メモリを汚染しません (たとえば、James のスニペットは、IE11 を検出すると、7 つの未削除のドキュメント フラグメントを作成します)。
2) マークアップを生成する前に documentMode 値をチェックするため、高速です。
3) 特に JavaScript プログラマーの初心者にとっては、はるかに読みやすくなっています。

要点リンク: https://gist.github.com/julianshapiro/9098609

/*
 - Behavior: For IE8+, we detect the documentMode value provided by Microsoft.
 - Behavior: For <IE8, we inject conditional comments until we detect a match.
 - Results: In IE, the version is returned. In other browsers, false is returned.
 - Tip: To check for a range of IE versions, use if (!IE || IE < MAX_VERSION)...
*/

var IE = (function() { 
    if (document.documentMode) {
        return document.documentMode;
    } else {
        for (var i = 7; i > 0; i--) {
            var div = document.createElement("div");

            div.innerHTML = "<!--[if IE " + i + "]><span></span><![endif]-->";

            if (div.getElementsByTagName("span").length) {
                return i;
            }
        }
    }

    return undefined;
})();
于 2014-02-19T20:19:15.077 に答える
8
var ie = !-[1,]; // true if IE less than 9

このハックは、ie5、6、7、8 でサポートされています。これは ie9+ で修正されています (したがって、この質問の要求に適合します)。このハックは、すべての IE 互換モードで機能します。

仕組み: つまり、エンジンは空の要素を持つ配列 (この [,1] など) を 2 つの要素を持つ配列として扱いますが、他のブラウザーは要素が 1 つしかないと考えます。したがって、この配列を + 演算子で数値に変換すると、次のような処理が行われます: (',1' in ie / '1' in other)*1 と、ie では NaN、その他では 1 が得られます。それをブール値に変換し、! で値を逆にします。単純。ちなみに、! なしで短いバージョンを使用できます。記号ですが、値は反転されます。

これは今のところ最短のハックです。そして私は著者です;)

于 2015-06-03T10:30:11.127 に答える
6

代わりにオブジェクト検出を使用することにしました。

これを読んだ後: http://www.quirksmode.org/js/support.html とこれ: http://diveintohtml5.ep.io/detect.html#canvas

私は次のようなものを使用します

if(!!document.createElement('canvas').getContext) alert('what is needed, supported');
于 2011-04-07T02:25:04.603 に答える
5

このリンクには、Internet Explorer のバージョンの検出に関する関連情報が含まれています。

http://tanalin.com/en/articles/ie-version-js/

例:

if (document.all && !document.addEventListener) {
    alert('IE8 or older.');
}
于 2013-04-19T17:40:18.010 に答える
4

正規表現と を使用して、すばやく汚れた方法でそれを行うことができます.match()

if (navigator.userAgent.match(/MSIE\s(?!9.0)/)) {
    // ie less than version 9
}
于 2011-04-07T01:22:51.153 に答える
4

私があなたなら、条件付きコンパイルまたは機能検出を使用します。
別の方法を次に示します。

<!--[if lt IE 9]><!-->
<script>
    var LTEIE8 = true;
</script>
<!--<![endif]-->
于 2011-04-07T07:45:56.463 に答える
1

JavaScriptで行う必要がありますか?

そうでない場合は、IE 固有の条件付きコメント構文を使用できます。

<!--[if lt IE 9]><h1>Using IE 8 or lower</h1><![endif]-->
于 2011-04-07T01:23:02.503 に答える
1
if (+(/MSIE\s(\d+)/.exec(navigator.userAgent)||0)[1] < 9) {
    // IE8 or less
}
  • 次を使用してIEバージョンを抽出します。/MSIE\s(\d+)/.exec(navigator.userAgent)
  • IE 以外のブラウザの場合、これが返さnullれるため、その場合||0はそれnull0
  • [1]IE のメジャー バージョンを取得するかundefined、IE ブラウザではない場合
  • リーディング+はそれを数値に変換し、undefinedに変換されますNaN
  • 数値と比較するNaNと常に返されますfalse
于 2016-09-08T17:51:59.823 に答える