ブラウザ判別関数
昨日の調査を受けて、判別用の関数を作る。
目標
こんな感じの数値を返す関数にする。
Firefox | 2.0以降なら2、それ以外は1 |
Safari | 3.04以降なら2、それ以外は1 |
Opera | 9.25以降なら2、8以降なら1、8未満なら0 |
IE | 6.0以降なら2、5.0以降なら1、4.0以前なら0 |
MacIE | 0 |
その他 | 0 |
でこれらはこんな意味を持つつもり。
2 | prototype.jsもjQueryも使える最近のブラウザ |
1 | 少し古いけどまあ許せるブラウザ |
0 | 古すぎ |
で、もっと新しい仕様とかに対応したければ3とか4を追加していく仕組みにしたい。
方針
以下の順番で判別していくつもり。
IEの判別
IEの場合は、条件付きコンパイルを使って、@_jscript_versionを使う。JScript のバージョン情報によると、IE6.0が5.6、IE5.0が5.0ということなので、それで判断して2/1/0を返す。
ただし、条件付きコンパイルはMac IEでも有効(条件付きコメントは×)だけれども、手元のMac IE 5.23では "5" を返したので、このままだとWin IE 5.0と同じと判断されてしまい1を返すので、@_win64/@_win32/@_win16を見るようにする。@_macはMacだとtrueのはずだけれどもうまく動かない様子(NaNになる)。
addEventListenerの有無を調査
この時点でwindow.addEventListenerが定義されていなければ0とする。IEは前項ですでに判別済みなので、window.attachEventを調べる必要はなし。
Operaの判別
window.opera.versionを使う。8.0未満なら定義自体がないので0を返す。
あとは"9.25"と比較して2か1を返す。
id="opera"な要素が読み込み済みの場合は0が返されるので、このチェック関数はHEAD部分あたりで使うようにする。
WebKitの判別
明日書く
Geckoの判別
明日書く
参考記事
以下の記事を参考にしてます。
- JavaScript によるブラウザ判別の実際CommentsAdd Star
- http://d.hatena.ne.jp/os0x/20090202
- JavaScript でのブラウザ判別 - 「仕様の盲点」ではなく、「プロパティの有無」を使う方がマシ
- http://end-of-file.net/blog/2009-02.html#date-2009-02-01
- 「プロパティの有無」による JavaScript でのブラウザ判別・補遺
- http://end-of-file.net/blog/2009-02.html#date-2009-02-02