ブラウザの機能の検出
更新 : 2007 年 11 月
ブラウザは、ほとんどの JScript の機能に対応していますが、.NET Framework 用の新機能であるクラス ベースのオブジェクト、データ型、列挙型、条件付きコンパイル ディレクティブ、および const ステートメントは、サーバー側だけでサポートされています。このため、これらの機能はサーバー側のスクリプトだけで使用します。詳細については、「JScript のバージョン情報」を参照してください。
JScript スクリプトでは、スクリプトを解釈またはコンパイルするエンジンの機能を検出できます。サーバー側の (ASP または ASP.NET で実行される) アプリケーションやコマンド ライン プログラムを作成している場合、この処理は不要です。これらの場合、サポートされる JScript のバージョンやコードは簡単にわかります。ただし、クライアント側のスクリプトをブラウザで実行する場合は、スクリプトとブラウザの JScript エンジンに互換性があることを確実にするために、この検出が重要になります。
JScript の互換性を確認する方法には、スクリプト エンジンの関数を使用する方法と、条件付きコンパイルを使用する方法の 2 つがあります。どちらの方法にもそれぞれ利点があります。
スクリプト エンジンの関数
スクリプト エンジンの関数 (ScriptEngine、ScriptEngineBuildVersion、ScriptEngineMajorVersion、ScriptEngineMinorVersion) は、スクリプト エンジンの現在のバージョンに関する情報を返します。詳細については、「関数 (JScript)」を参照してください。
互換性を維持するために、サポートされる JScript のバージョンを確認するページでは、JScript Version 1 の機能だけを使用してください。エンジンが JScript の Version 1.0 より後のバージョンをサポートしている場合は、高度な機能を含む別のページにリダイレクトできます。つまり、サポートする JScript のバージョンごとに、異なる Web ページが必要となります。ほとんどの場合、最も効果的な解決策は 2 つのページを用意することです。1 つのページは JScript の特定のバージョン用にデザインし、もう 1 つのページは JScript を使用せずに動作するようにデザインします。
メモ : |
---|
高度な機能を利用する JScript コードは、互換性のないエンジンを持つブラウザで実行されない、別のページに配置する必要があります。ブラウザのスクリプト エンジンは、ページに含まれているすべての JScript コードを解釈するため、この処理が必要です。if…else ステートメントを使用して、最新の JScript を使用するコードと JScript Version 1 のコードを切り替える方法は、古いエンジンでは動作しません。 |
次の例は、スクリプト エンジンの関数の使用例を示しています。これらの関数は JScript Version 2.0 で導入されたため、関数を使用する前に、エンジンが関数をサポートしているかどうかを確認する必要があります。エンジンが JScript Version 1.0 しかサポートしていない場合、または JScript を認識しない場合、typeof 演算子は各関数名に対して "undefined" を返します。
if("undefined" == typeof ScriptEngine) {
// This code is run if the script engine does not support
// the script engine functions.
var version = 1;
} else {
var version = ScriptEngineMajorVersion();
}
// Display the version of the script engine.
alert("Engine supports JScript version " + version);
// Use the version information to choose a page.
if(version >= 5) {
// Send engines compatible with JScript 5.0 and better to one page.
var newPage = "webpageV5.htm";
} else {
// Send engines that do not interpret JScript 5.0 to another page.
var newPage = "webpagePre5.htm";
}
location.replace(newPage);
条件付きコンパイル
条件付きコンパイル変数および条件付きコンパイル ステートメントは、条件付きコンパイルをサポートしていないエンジンから JScript コードを隠ぺいできます。Web ページに代替コードを少しだけ含める場合は、この方法が役に立ちます。
メモ : |
---|
条件付きコンパイル ブロックでは、複数行のコメントを使用しないでください。条件付きコンパイルをサポートしていないエンジンが、解釈を誤る可能性があります。 |
<script>
/*@cc_on
@if(@_jscript_version >= 5 )
// Can use JScript Version 5 features such as the for...in statement.
// Initialize an object with an object literal.
var obj = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"};
var key;
// Iterate the properties.
for (key in obj) {
document.write("The "+key+" property has value "+obj[key]+".<BR>");
}
@else
@*/
alert("Engine cannot interpret JScript Version 5 code.");
//@end
</script>
条件付きの @if ブロックに多くのコードが含まれる場合は、スクリプト エンジンの関数を使用する方法が簡単です。