ブラウザ判別関数

昨日の調査を受けて、判別用の関数を作る。

目標

こんな感じの数値を返す関数にする。

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.jsjQueryも使える最近のブラウザ
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を見るようにする。@_macMacだと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