現在(2000年12月)では JavaScript には6つ( 検討中の仕様も入れれば7つ )のバージョンが存在します。
バージョン | 代表的なブラウザ | 備考 |
---|---|---|
1.0 | NN2.0 の途中〜 | JavaScript のオリジナルの仕様 |
IE3.0 | ||
1.1 | NN3 | Array objectやイベントなどの追加 |
IE3.02+JScript1.3パッチ | ||
1.2 | NN4.0 〜 4.05 | Layer/DIV 機能, CSSの追加 |
IE4 | ||
1.3 | NN4.06 〜 | unicodeなど主に ECMA-262対応 |
IE5.0 〜 | ||
1.4 | NN5( 開発中止 ) | catch/try 等の例外処理など( ECMA-262対応 ) |
1.5 | Mozilla( NN6,7 ) | ECMA-262 3rd Edition |
2.0 | ? | ECMA-262 4th Edition |
バージョンが 1.1 までは、バージョン番号が言語仕様と DOM ( DOM Object Model )
の両方を意味しているのに対し、 1.2 以降は言語仕様のみを意味しています。
つまり、JavaScript1.2 以降は JavaScript のバージョンだけでなく、
DOM の実装状態もあわせて確認する必要があるわけです。
そこで、以下に基本的な識別方法を挙げておきます。
ブラウザの識別
if(navigator.appName=='Microsoft Internet Explorer'){ // IE用のコード } else if(navigator.appName=='Netscape'){ // NN用のコード }
この手法の仲間として navigator.appVersion, navigator.userAgent の文字列に、
特有の文字列があるかを調べる手法もあります
Opera, Safari などの様々なブラウザを考慮するなら、
これらのプロパティを組み合わせて切り分けることができます
if(window.opera){ // Opera 用のコード } else if(navigator.appName == 'Konqueror'){ // Konqueror 用のコード } else if(navigator.appName == 'Microsoft Internet Explorer'){ // IE 用のコード } else if(navigator.userAgent.indexOf('Safari') != -1){ // Safari 用のコード } else if(navigator.userAgent.indexOf('Firebird') != -1){ // Firebird 用のコード } else if(navigator.userAgent.indexOf('Netscape') != -1){ // Netscape 6,7 用のコード } else if(navigator.userAgent.indexOf('Gecko') != -1){ // Mozilla 用のコード } else if(navigator.appName == 'Netscape'){ // Netscape Navigator, Communicator 用のコード } else { // その他のブラウザ }
上の例で opera は userAgent の文字列からでも判別できますが、
window.opera プロパティで判断した方が確実でしょう
Konqueror( KDE のブラウザ )は window.konqueror プロパティがありますが( Ver 3より )
アクセスすると undefined になるため使用できません
Firebird, Netscape6/7, Mozilla を一括して判断するなら
userAgent に 'Gecko' の文字列があるかどうかだけで判断できます
また、IE のみを識別する手法として以下のように記述することもできます。
<script language="JavaScript"><!-- // IE/NN共通 または NN専用のコード // --></script> <script language="JScript"><!-- // IE専用のコード( NN専用のコードをオーバライドする ) // --></script>
ブラウザのバージョン番号による識別
if(parseInt(navigator.appVersion)>=4){ // バージョン 4.0 以上用のコード } if(parseFloat(navigator.appVersion)>4.05){ // バージョン 4.05 より後のブラウザ用のコード }
残念ながら、この手法はもはやあまり有効とは言えません
なぜなら、もはやブラウザの種類・バージョンは非常に多岐に亘り、
中には appVersion や userAgent プロパティの中にも記述がないものがあるためです
( Safari 1.0 に至っては "Safari/85" なんて表記になっていたりします f(^^;
)
JavaScriptのバージョン番号による識別
<script language="JavaScript1.2"><!-- // JavaScript1.2 以降でサポートされている構文のスクリプト // --></script>
この表記は現在のところ Konqueror, Safari では有効でありません
オブジェクトによる識別
if(document.all){ // IE4以降のコード if(document.getElementById){ // IE5以降のコード } else { // IE4用のコード } } else if(document.layers){ // NN4のコード }
この識別は意味的には JavaScript やブラウザのバージョンではなく、 DOM の種類の識別する手法に属しますが、 充分に特徴的なプロパティを選択すればブラウザの種類やバージョンの識別に利用でき、 応用範囲の広い手法と言えます。
バージョンの確認
あなたのブラウザの JavaScript のバージョンが知りたい場合は、 こちらを見てください。