たぶん忘れるメモ

記憶力はないのです。

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で判定すればいいんじゃないかって思った。