IE ブラウザのどのバージョンであっても、Web 標準との互換性は常に多少なりともあります。コード作業者にとって、IE の互換性の問題を考慮するために、CSS を書くか JS を書くかにかかわらず、IE は特別に扱われることが多く、ある程度の判断が必要になるのは当然です。この記事では、IE のスタイルを区別する方法については説明しません。IE ブラウザを決定するのは JS のみです。
IE ブラウザを決定する世界最短の Javascript メソッドがロシアから誕生しました。さまざまなバージョンの IE およびその他の現在一般的なブラウザーでテストされていますが、Microsoft は IE ベースのバグを認識していましたが、それらを修正したことはありません。
<script type='text/javascript'> var ie = !-[1,]; アラート(ie); </script> |
上記のコードの実行結果は、IE では true を返し、その他の標準ブラウザでは false を返します。 !-[1,]、わずか 6 バイトです!
ただし、判定が逆転し、標準ブラウザが true を返し、IE が false を返す場合は 1 バイト短縮できます。
<script type='text/javascript'> notIe = -[1,]; if(-[1,]){ // 標準ブラウザコード }それ以外{ // IE のみのコード } </script> |
これを読んで、これらがどのように機能するか知りたいですか?以下を読み続けてください。
このバグは、IE が空の配列要素を配列要素の総数に追加するために発生します。
[1,]. 長さ 標準ブラウザは 1 を返します (標準 ECMAscript に基づいて、配列の末尾のカンマ「,」は無視されます。これは列内での表示や自動生成などを容易にするためです)。 2を返します。この配列を印刷すると、IE は 2 つの要素である「1, 」を返しますが、他の標準ブラウザは「1」を返します。
これは、IE および FF で次のコードを実行することで簡単に確認できます。
<script type='text/javascript'> アラート([,]==','); //これは IE を決定する 8 文字です </script> |
[1,] 実際、ブラウザの操作は toString() で文字列を文字列に変換し、-[1,] で文字列を強制的に数値に変換します。 IE は NaN を返しますが、[1,] が文字列に変換された後の「1」にはカンマが含まれるため、残念ながら NaN は数値ではありません。他の標準ブラウザは、ゼロ以外の数値である -1 を返します。
NaN をブール値に変換すると false が返されるため、IE では -[1,] は false を返します。ブール型 (-1 など) に変換された 0 以外の数値は、標準ブラウザでは true を返します。したがって、!-[1,] は、IE では true を返しますが、他の標準ブラウザでは false を返すという判定結果が得られます。これにより、IE ブラウザを区別して判断するという目的も達成されます。
もちろん、前に述べたように、Microsoft は実際にはこのバグについて長い間知っていましたが、修正したことがなかったので、将来的には > IE8 IE ブラウザがまだ動作するかどうかはわかりませんが、基本的には何世代も経った後、IE はIE は修復されておらず、今後も修復される可能性は低いです。
以下は IE ブラウザを区別および判断するための他のコードです。以下も参照できます。
<script type='text/javascript'> // ディーン・エドワーズからのオプション: var ie = /*@cc_on!@*/false; // コメント行を使用します。 var ie//@cc_on=1; // バリエーション (短い変数): var ie = 'v'=='v'; // ギャレス・ヘイズ (元記録保持者) へのオプション: var ie = !+"v1"; </script> |