スクリプトの記述


・JavaScript のバージョン

現在(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 のバージョンが知りたい場合は、 こちらを見てください。


Copyright(c) 1998 - 2003 ShinSoft. All rights reserved.