IE判定ってどうするのが一番いいの?って気になった
ググってみたらこちらで素敵にまとめられてた件…
http://d.hatena.ne.jp/Naotsugu/20110927/1317140891
でも折角なので、手持ちのスクリプトをgrepしてみて引っかかったこの2タイプの違いについて調べてみる。
【1】
if (/*@cc_on!@*/false) { // for IE
【2】
if (window.navigator.userAgent.toLowerCase().indexOf("msie") > -1) { // for IE
【1】
@がついてるのは、JScriptの条件付きコンパイル。
http://msdn.microsoft.com/ja-jp/library/7kx09ct1.aspx
これはコメントで囲んでる中身がIEのとき(JScriptが実行される環境にあるとき)実行される。
なので、
@cc_on で条件付コンパイルをアクティブにする。
↓
条件付のスクリプトの内容は !(否定演算子)。
↓
つまり、if (!false) { と同じことになる。
↓
IEでは true が返るけれど、コメントの中身が無効になるIE以外だと if (false) { の判定をする。
こういうロジックのようです。
JScriptのバージョンもわかるので、こういう使い方もする。
if (/*@cc_on!@*/false) { /*@if (@_jscript_version <= 5.6) alert("IE6 爆発しろ"); @end@*/ }
JScriptのバージョン一覧はこちら。
http://msdn.microsoft.com/ja-jp/library/2z6exc9e%28v=VS.100%29.aspx
【2】
ライブラリ見てみてもこっちのパターンが多そう。
正規表現の場合もあるけれどユーザーエージェントから判定をするやり方。IEのバージョンを正確に取るには完全に保証できないっぽいけど(OSのインストール状態によって色んな表記があるから)それはJScriptで判定すればいいんじゃないかって思った。