インターネット/イントラネット環境では、HTML ページを表示するブラウザのプラットフォームが異なることが考えられます。Java Plug-in を起動するのは、ブラウザとプラットフォームの組み合わせが適切な場合だけに限定する必要があります。組み合わせが適切でない場合は、ブラウザのデフォルト JVM を使用してください。この操作の実行には、次の Java Plug-in タグを使用します。
元の APPLET タグ
<APPLET code="XYZApp.class" codebase="html/" align="baseline" width="200" height="200"> <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz"> No Java 2 SDK, Standard Edition v 1.4 support for APPLET!! </APPLET> |
新しい書式のタグ
次に、上記のタグと等価な Java Plug-in タグの例を示します。この例には、コメントも含まれています。
<!-- The following code is specified at the beginning of the <BODY> tag. --> <SCRIPT LANGUAGE="JavaScript"><!-- var _info = navigator.userAgent; var _ns = false; var _ie = (_info.indexOf("MSIE")> 0 && _info.indexOf("Win")> 0 && _info.indexOf("Windows 3.1") < 0); //--></SCRIPT> <COMMENT><SCRIPT LANGUAGE="JavaScript1.1"><!-- var _ns = (navigator.appName.indexOf("Netscape")>= 0 && ((_info.indexOf("Win")> 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0) || _info.indexOf("Sun")> 0)); //--></SCRIPT></COMMENT> <!-- The following code is repeated for each APPLET tag --> <SCRIPT LANGUAGE="JavaScript"><!-- if (_ie == true) document.writeln(' <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="200" height="200" align="baseline" codebase="http://java.sun.com/jpi/jinstall-14-win32.cab#Version=1,4,0,mn"> <NOEMBED><XMP>'); else if (_ns == true) document.writeln(' <EMBED type="application/x-java-applet;jpi-version=1.4" width="200" height="200" align="baseline" code="XYZApp.class" codebase="html/" model="models/HyaluronicAcid.xyz" pluginspage="http://java.sun.com/jpi/plugin-install.html"> <NOEMBED><XMP>'); //--></SCRIPT> <APPLET code="XYZApp.class" codebase="html/" align="baseline" width="200" height="200"> </XMP> <PARAM NAME="java_code" VALUE="XYZApp.class"> <PARAM NAME="java_codebase" VALUE="html/"> <PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4"> <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz"> <PARAM NAME="scriptable" VALUE="true"> No Java 2 SDK, Standard Edition v 1.4 support for APPLET!! </APPLET></NOEMBED></EMBED> </OBJECT> <!-- <APPLET code="XYZApp.class" codebase="html/" align="baseline" width="200" height="200"> <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz"> No Java 2 SDK, Standard Edition v 1.4 support for APPLET!! </APPLET> --> |
このタグは元の APPLET タグと比較して複雑に見えますが、実際にはそうではありません。Java Plug-in タグのコードの大部分は、使用されるアプレットに関係なく同じです。Web ページの作成者は、たいていの場合、Java Plug-in タグをコピー&ペーストできます。
スクリプトの最初のブロックで、ブラウザおよびプラットフォームを抽出します。アプレットを実行するブラウザおよびプラットフォームを判別する必要があります。 これは、JavaScriptTM を使用して、まずブラウザ名、次にプラットフォームを抽出することで実行します。HTML ドキュメントごとに、この操作を 1 回実行します。
スクリプトの 2 番目のブロックで、APPLET タグの置換を実行します。各 APPLET タグを類似のコードブロックで置き換える必要があります。スクリプトは、ブラウザに応じて、APPLET タグを EMBED タグまたは OBJECT タグに置き換えます。Internet Explorer ブラウザの場合は OBJECT タグ、Netscape Navigator ブラウザの場合は EMBED タグに置き換えます。最後に、元の APPLET タグをコメントとして末尾に含めます。Java Plug-in の起動を解除することを考えて、元の APPLET タグを残しておくことをお勧めします。
最初の JavaScript で、ブラウザおよびそのブラウザが実行されているプラットフォームを確立します。現在のところ、Java Plug-in は Microsoft Windows プラットフォームおよび Solaris オペレーティング環境のみをサポートするため、この操作が必要になります。Java Plug-in がサポートしない Win32 プラットフォームは、Windows NT 3.51 だけです。Java Plug-in の起動は、サポートされているブラウザおよびプラットフォーム上でのみ実行する必要があります。ブラウザが Internet Explorer の場合、スクリプトにより変数 _ie が true に設定されます。Netscape ブラウザの場合、変数 _ns が true に設定されます。(JavaScript では、変数名はすべて "_" で始まることに注意してください。これは、同一ページのほかの JavaScript 変数との競合を避けるためです。)
適切なブラウザを検出するため、JavaScript は JavaScript の navigator オブジェクト内の次の 3 つの文字列を評価します。userAgent , appVersion, および appName 。これらの文字列には、ブラウザおよびプラットフォームに関する情報が含まれます。次に示す、文字列 userAgent のいくつかの例を参考にすることにより、userAgent を評価してブラウザを判別する方法を理解できます。以下に示すのは、Internet Explorer 内で使用されるさまざまなプラットフォーム用の userAgent 文字列の例です。この表では、IE は Internet Explorer を表します。
プラットフォームとブラウザ |
JavaScript の Navigator.userAgent 文字列 |
---|---|
Windows 2000 と IE 5.0 |
"Mozilla/4.0 (compatible; MSIE 5.01; Window NT5.0) |
Windows NT 4.0 と IE 4.0 |
"Mozilla/4.0 (compatible; MSIE 4.0; Windows NT)" “ |
Windows 95 と IE 4.0 |
"Mozilla/4.0 (compatible; MSIE 4.0; Windows 95)“ |
Windows NT 3.51 と IE 4.0 |
"Mozilla/4.0 (compatible; MSIE 4.0; Windows 3.1)“ |
Windows 3.1 と IE 4.0 |
"Mozilla/4.0 (compatible; MSIE 4.0; Windows 3.1)“ |
Windows NT 4.0 と Navigator 4.04 |
Mozilla/4.04 [en] (WinNT; I) I)“ |
Windows NT 3.51 と Navigator 4.04 |
Mozilla/4.04 [en] (WinNT; I) I)“ |
Windows 95 と Navigator 4.03 |
Mozilla/4.03 [en] (Win95; I) I)“ |
Solaris 2.6 と Navigator 4.02 |
"Mozilla/4.02 [en] (X11; l; SunOS 5.6 sun4u) |
どの場合でも、Internet Explorer 内の文字列 userAgent に、部分文字列 "MSIE" が常に含まれます。また、Windows 3.1 および Windows 3.51 で稼働する Internet Explorer は 16 ビットであるため、これらのプラットフォーム上の Internet Explorer の userAgent 文字列には、部分文字列 "Windows 3.1" が含まれます。Internet Explorer 4 は Macintosh および Solaris オペレーティング環境でも利用可能であるため、これらのバージョンでは userAgent 文字列に部分文字列 "Win" は含まれません。また、Windows CE 上の Internet Explorer は JavaScript をサポートしません。これらをまとめると、次のようになります。
userAgent 文字列/ブラウザ |
“MSIE” を含む |
“Win” を含む |
“Windows 3.1” を含まない |
---|---|---|---|
Windows 3.1 と IE 4 |
O |
O |
|
Windows NT 3.51 と IE 4 |
O |
O |
|
Windows 95 と IE 4 |
O |
O |
O |
Windows NT 4.0 と IE 4 |
O |
O |
O |
Windows CE と IE |
|
|
|
Mac と IE |
O |
|
O |
UNIX と IE |
O |
|
O |
任意のプラットフォームのほかのブラウザ |
|
|
O |
上の表から、Windows 95 および Windows NT 4.0 で稼働する Internet Explorer だけが Java Plug-in のブラウザおよびプラットフォーム要件を満たすことがわかります。ただし、ここでは、今後の Internet Explorer のリリースや Internet Explorer を搭載する Microsoft Windows のリリースのことは考慮に入れていません。userAgent 文字列に "MSIE" および "Win" が含まれる限り、上記のコードはWin32 用 Internet Explorer の将来のリリースで動作するはずです。
このロジックをまとめると、次のようになります。
<SCRIPT LANGUAGE="JavaScript"> var _info = navigator.userAgent; var _ie = (_info.indexOf("MSIE")> 0 && _info.indexOf("Win")> 0 && _info.indexOf("Windows 3.1") < 0); //--></SCRIPT> |
Navigator が動作しているプラットフォームが適切であることを検出するのは、もっと難しい問題です。JavaScript を使用するだけでは、ブラウザが稼働しているオペレーティングプラットフォームが、Windows NT 3.51 と Windows NT 4.0 のどちらかなのかを判別することはできません。(上記の表を参照して、文字列 userAgent を確認してください。Navigator ブラウザでは、Windows NT 3.51 と Windows NT 4.0 オペレーティングプラットフォームの文字列 userAgent が同じになります。)Java Plug-in は Windows NT 4.0 オペレーティングプラットフォームだけをサポートするため、この違いを識別することは重要です。適切なプラットフォームで Java Plug-in を実行するには、Netscape Navigator ブラウザで LiveConnect を使用して OS のバージョン番号を判別する必要があります。これらをまとめると、次のようになります。
ロジック検査/ブラウザ |
appName に “Netscape” を含む |
userAgent に "Win" あり |
userAgent に "Win16" を含まない |
os.version に "3.5" を含まない |
userAgent に "Sun" を含む |
---|---|---|---|---|---|
Windows 3.1 と Netscape 4 |
O |
O |
|
O |
|
Windows NT 3.51 と Netscape 4 |
O |
O |
O |
|
|
Windows 95 と Netscape 4 |
O |
O |
O |
O |
|
Windows NT 4.0 と NS 4 |
O |
O |
O |
O |
|
Solaris と NS |
O |
|
|
|
O |
Solaris と IE |
|
|
|
|
O |
ほかのプラットフォームの Netscape |
O |
|
O |
OS に依存 |
|
ほかのプラットフォームの IE |
|
O |
O |
|
|
任意のプラットフォームのほかのブラウザ |
|
|
|
|
|
上記のロジックは、次のコードで表されます。
<SCRIPT LANGUAGE="JavaScript"> var _info = navigator.userAgent; var _ns = false; //--></SCRIPT> <COMMENT><SCRIPT LANGUAGE="JavaScript1.1"> var _ns = (navigator.appName.indexOf("Netscape")>= 0 && ((_info.indexOf("Win")> 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0) || _info.indexOf("Sun")> 0)); //--></SCRIPT></COMMENT> |
上記の表で、すべての条件を満たすのは Windows 95、Windows NT 4.0、および Solaris オペレーティング環境の Netscape Navigator ブラウザだけであることに注目してください。LiveConnect を使用して OS のバージョン番号を取得しますが、LiveConnect は Netscape Navigator ブラウザだけがサポートしているため、Internet Explorer では LiveConnect を使用する JavaScript は認識されません。このことで問題が発生するのを防ぐため、スクリプトのこの部分を Internet Explorer 固有のコメントタグである COMMENT タグで囲む必要があります。Internet Explorer は COMMENT タグ内のテキストを無視しますが、Netscape Navigator は無視しません。さらに、ブラウザが Netscape Navigator 2 の場合には、スクリプト言語を JavaScript1.1 と指定することにより、このテキストが無視されるようにする必要があります。
ここで、Internet Explorer と Netscape Navigator に対応した上記のロジックをまとめると、次のようなスクリプトになります。
<!-- The following code is specified at the beginning of the <BODY> tag. --> <SCRIPT LANGUAGE="JavaScript"><!-- var _info = navigator.userAgent; var _ns = false; var _ie = (_info.indexOf("MSIE")> 0 && _info.indexOf("Win")> 0 && _info.indexOf("Windows 3.1") < 0); //--></SCRIPT> <COMMENT><SCRIPT LANGUAGE="JavaScript1.1"><!-- var _ns = (navigator.appName.indexOf("Netscape")>= 0 && ((_info.indexOf("Win")> 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0 || _info.indexOf("Sun")> 0)); //--></SCRIPT></COMMENT> |
この JavaScript ブロックは、HTML ファイルの <BODY> 部の先頭に配置する必要があります。先頭に配置することにより、ほかの JavaScript が変数 _ie および _ns を参照できるようになります。この JavaScript はどの HTML ファイルでも同一であり、各 HTML 本体に一度だけ指定します。
HTML タグの第 2 ブロックは、APPLET タグ内のデータからマッピングされた、対応する OBJECT タグおよび EMBED タグです。ブラウザが Windows 95、Windows 98、または Windows NT 4.0 オペレーティング環境で稼働する Internet Explorer の場合、JavaScript は OBJECT タグを出力します。ブラウザが Windows 95、Windows 98、Windows NT 4.0、または Solaris オペレーティング環境で稼働する Netscape Navigator 4 ブラウザの場合、JavaScript は (構文は多少異なりますが) EMBED タグも出力します。ブラウザおよびプラットフォームの検出機構は、すでに説明したとおりです。(<!— タグおよび –> タグは HTML 内でコメントの記述に使用されます。)
元の APPLET タグ
<APPLET code="XYZApp.class" codebase="html/" align="baseline" width="200" height="200"> <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz"> No Java 2 SDK, Standard Edition v 1.4 support for APPLET!! </APPLET> |
新しい書式のタグ
<SCRIPT LANGUAGE="JavaScript"><!-- if (_ie == true) document.writeln('<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="200" height="200" align="baseline" codebase="http://java.sun.com/jpi/jinstall-14-win32.cab#Version=1,4,0,mn"> <NOEMBED><XMP> '); else if (_ns == true) document.writeln('<EMBED type="application/x-java-applet;version=1.4" width="200" height="200" align="baseline" code="XYZApp.class" codebase="html/" model="models/HyaluronicAcid.xyz" pluginspage="http://java.sun.com/jpi/plugin-install.html"> <NOEMBED><XMP>'); //--></SCRIPT> <APPLET code="XYZApp.class" codebase="html/" align="baseline" width="200" height="200"></XMP> <PARAM NAME="java_code" VALUE="XYZApp.class"> <PARAM NAME="java_codebase" VALUE="html/"> <PARAM NAME="java_type" VALUE="application/x-java-applet;version=1.4"> <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz"> LUE="models/HyaluronicAcid.xyz"> <PARAM NAME="scriptable" VALUE="true"> No Java 2 SDK, Standard Edition v 1.4 support for APPLET!! </APPLET></NOEMBED></EMBED> </OBJECT> |
新しい Java Plug-in タグでは、元の APPLET タグもマッピングされていることに注目してください。これは、サポートされるプラットフォームでのみ Java Plug-in を使用するためです。スクリプト内に APPLET タグを残しておくことにより、Java Plug-in をサポートしないブラウザや、JavaScript をサポートしないブラウザがデフォルトの JVM を使用するアプレットを適切に処理できます。Java Plug-in をサポートしないプラットフォームの HotJava Browser、Internet Explorer、および Netscape Navigator ブラウザ、または JavaScript をサポートしないブラウザは、上述のタグを次のように読み取ります。
<APPLET code="XYZApp.class" codebase="html/" align="baseline" width="200" height="200"></XMP> <PARAM NAME="java_code" VALUE="XYZApp.class"> <PARAM NAME="java_codebase" VALUE="html/"> <PPARAM NAME="model" VALUE="models/HyaluronicAcid.xyz"> <PARAM NAME="scriptable" VALUE="true"> No Java 2 SDK, Standard Edition v 1.4 support for APPLET!! <PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4"> </APPLET></NOEMBED></EMBED></OBJECT> |
これらのブラウザは、</XMP>、 </OBJECT>、</EMBED>、および </NOEMBED> タグも無視します。これは、対応する <XMP>、<OBJECT>、<EMBED>、および <NOEMBED> タグが存在しないためです。Java Plug-in は、Java 2 SDK, Standard Edition v 1.4 以降のリリースの機能を対象にして設計されています。そのため、Java 2 SDK 1.4 を完全にはサポートせず、Java Plug-in をサポートしないこれらのブラウザでは、「No Java 2 SDK, Standard Edition v 1.4 support for APPLET」というメッセージが表示されます。
これまで示した例とは異なり、マッピングされたパラメータ 名には、code、codebase、および type ではなく、 java_code、java_codebase、および java_type が含まれます。これが必要なのは、<APPLET> タグと </APPLET> タグの間の <PARAM> 内で code および codebase を指定すると、一部のブラウザで問題が発生するためです。
Windows 95、Windows 98、または Windows NT 4.0 で稼働する Internet Explorer は、タグを次のように読み取ります。
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="200" height="200" align="baseline" codebase="http://java.sun.com/jpi/jinstall-14-win32.cab#Version=1,4,0,mn"> <NOEMBED><XMP> <APPLET code="XYZApp.class" codebase="html/" align="baseline" width="200" height="200"></XMP> <PARAM NAME="java_code" VALUE="XYZApp.class"> <PARAM NAME="java_codebase" VALUE="html/"> <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz"> <PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4"> <PARAM NAME="scriptable" VALUE="true"> No Java 2 SDK, Standard Edition v 1.4 support for APPLET!! </APPLET></NOEMBED></EMBED> </OBJECT> |
<XMP> タグを使用する場合には注意が必要です。Internet Explorer は <OBJECT> タグを認識するため、<APPLET> タグを無効にする必要があります。無効にしない場合、2 つのアプレットがブラウザ内で同時に表示されます。1 つは Microsoft の JVM で動作し、もう 1 つは Java Plug-in を使用する Sun の JVM で動作します。<XMP> タグを使用することで、この問題を解決できます。<XMP> および </XMP> タグの基本動作は、その間に記述されたすべての HTML タグを静的テキストのストリームに変換することです。上の例では、<XMP> および </XMP> タグを指定することにより、ブラウザが <APPLET> タグを HTML タグとしてではなく静的テキストとして処理します。ブラウザは <OBJECT> タグと <PARAM> タグの間の静的テキストをすべて無視するため、上のタグは実質的に次のようになります。
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="200" height="200" align="baseline" codebase="http://java.sun.com/jpi/jinstall-14-win32.cab#Version=1,4,0,mn"> <PARAM NAME="java_code" VALUE="XYZApp.class"> <PARAM NAME="java_codebase" VALUE="html/"> <PARAM NAME="java_type" VALUE="application/x-java-applet;version=1.4"> <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz"> <PARAM NAME="scriptable" VALUE="true"> No Java 2 SDK, Standard Edition v 1.4 support for APPLET!! </OBJECT> |
これは、上に示した OBJECT タグの例と同じになります。<OBJECT> タグは <NOEMBED>、</NOEMBED>、および <EMBED> タグを無視することに注意してください。
Windows 95、Windows 98、または Windows NT 4.0 オペレーティング環境で動作する Netscape Navigator 4 は、タグを次のように読み取ります。
<EMBED type="application/x-java-applet;jpi-version=1.4" width="200" height="200" align="baseline" code="XYZApp.class" codebase="html/" model="models/HyaluronicAcid.xyz" pluginspage="http://java.sun.com/jpi/plugin-install.html"> <NOEMBED><XMP> <APPLET code="XYZApp.class" codebase="html/" align="baseline" width="200" height="200"></XMP> <PARAM NAME="java_code" VALUE="XYZApp.class"> <PARAM NAME="java_codebase" VALUE="html/"> <PARAM NAME="java_type" VALUE="application/x-java-applet;jpi-version=1.4"> <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz"> <PARAM NAME="scriptable" VALUE="true"> No Java 2 SDK, Standard Edition v 1.4 support for APPLET!! </APPLET></NOEMBED></EMBED></OBJECT> |
ここでも、<EMBED> タグの内部で <XMP> タグが使用されているため、<APPLET> タグが無効にされています。<EMBED> タグは <PARAM> タグおよび </OBJECT> タグも無視します。このため、上のタグは実質的に次のようになります。
<EMBED type="application/x-java-applet;jpi-version=1.4" width="200" height="200" align="baseline" code="XYZApp.class" codebase="html/" model="models/HyaluronicAcid.xyz" pluginspage="http://java.sun.com/jpi/plugin-install.html"> <NOEMBED> No Java 2 SDK, Standard Edition v 1.4 support for APPLET!! </NOEMBED> </EMBED> |
これは、上述の EMBED タグの例と同じになります。
OBJECT-EMBED-JavaScript の複合タグを使用して、適切なプラットフォームの適切なブラウザで Java Plug-in を起動することができます。この複合タグは複雑なため、異機種混在環境で HTML ページを表示する場合にのみ使用してください。