Java Plug-in での OBJECTEMBED、および APPLET タグの使用


 

この章では、次のトピックについて説明します。

はじめに

このドキュメントでは、Java Plug-in に必要な、OBJECT および EMBED タグを含むタグ構造について説明します。対象読者として、HTML ページに Java Plug-in タグを手動で挿入する Web ページ作成者を想定しています。

注: Sun Microsystems から無料で入手可能な HTML コンバータでは、この作業を自動実行することができます。 Web ページ作成者の方には、このツールを利用することを強くお勧めします。

通常、アプレットは、HTML ファイル内で次のように指定されます。

<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 タグには、アプレットに関する情報を指定します。<APPLET></APPLET> タグの間に配置される <PARAM> タグには、インスタンスごとのアプレット情報を格納します。

APPLET はブラウザにより描画されますが、ブラウザに割り込みを行い、Sun の Java Runtime Environment (JRE) を使用したアプレットの実行を強制する、簡単な方法はありません。 ブラウザに、この動作を実行させるには、HTML ページで、通常の APPLET タグの代わりに、OBJECTEMBED タグのどちらかまたは両方を含む、Java Plug-in の特別なタグ構造を使用します。 これにより、ブラウザが Java Plug-in を起動させ、Sun の JRE を使用してアプレットが実行されます。

次のセクションでは、特定のブラウザとプラットフォームを組み合わせた環境で行う操作を細かく説明します。

バージョン番号に関する注記

製品のバージョン番号は、次の形式になります。

n1.n2.n3_n4n5

ここで、n1.n2 は「メジャーバージョン番号」、n3 は「マイナーバージョン番号」(「保守バージョン番号」とも呼ばれる)、n4n5 は「パッチバージョン番号」(「更新バージョン番号」とも呼ばれる) を表します。

以降の例では、バージョン番号のメジャーリリースとして 1.4 を、マイナーリリース番号として 0 を、 仮想のパッチ番号として mn を使用します。仮想の値を実際の Web ページの HTML に書き込まないでください。

場合によっては、1,4,0,mn14 など、多少異なる表示方法を使用することもあります (後者は、メジャーバージョン番号だけを示す場合)。

Windows 上の IE で動作する Java Plug-in

Windows 上の IE で Java Plug-in を使用する場合、OBJECT タグを利用します。 APPLET タグを 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>

新規 OBJECT タグ:

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="200" height="200" align="baseline" 
    codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
    <PARAM NAME="code" VALUE="XYZApp.class">
    <PARAM NAME="codebase" VALUE="html/">
    <PARAM NAME="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!!
</OBJECT>

注: 上記の codebase 値は仮想の値です。実際の HTML では使用しないでください。 現在、自動ダウンロード用に機能している codebasehttp://java.sun.com/products/plugin/autodl/jinstall-1_4_0-win.cab です。 ただし、これはパッチのリリースに伴って変更される可能性があります。 codebase の解釈に関する詳細は、以下を参照してください。

OBJECT タグには、APPLET タグと同様の情報が含まれることに留意してください。 IE で Java Plug-in を起動するには、これで十分です。 OBJECT タグの classid は、Java Plug-in 自体のクラス識別子です。 このクラス識別子は、すべての HTML ページで同じにする必要があります。 IE が OBJECT タグ内でこのクラス識別子を描画するとき、ブラウザ内への Java Plug-in のロードを試みます。

widthheight、および align など、OBJECT タグ内のいくつかの属性は、APPLET タグ内の対応する属性から直接マッピングされます。 IE は、これらに含まれるフォーマット情報を利用して、Java Plug-in の位置を設定します。この情報は変更されることなく直接マッピングされるため、Java Plug-in を使用するアプレットの位置および外観は、APPLET タグを使用するアプレットと同じになります。

APPLET タグのすべての属性を、OBJECT タグ属性にマッピングできるわけではありません。 たとえば、 APPLET タグの code および codebase 属性は、OBJECT タグ属性にマッピングされません。 その代わり、code 属性は PARAM code にマッピングされます。これは、HTML 仕様では、OBJECT タグ内に code 属性は存在しないためです。 OBJECT タグ属性に対応しない他の属性も存在します。 これらの属性は、1 つの例外を除き PARAM タグにマッピングする必要があります。

注: Java Plug-in の OBJECT タグでは、重複するパラメータ名の使用は禁止されています。

ただし、codebase 属性は例外です。 APPLET タグでは、codebase 属性は、追加のクラスファイルおよび JAR ファイルのダウンロード元の位置を表します。 一方、OBJECT タグでは、codebase 属性は、ローカルマシンに Java Plug-in が見つからない場合の Java Plug-in のダウンロード元の位置を表します。 codebase 属性は APPLET タグと OBJECT タグとで異なる意味を持つため、この属性を OBJECT タグの PARAM codebase 内にマッピングして競合を回避する必要があります。

上の例では、 APPLET タグの code および codebase 属性は、OBJECT タグのパラメータにマッピングされます。 PARAM code はアプレットを識別するため、その値を APPLET タグの code 属性と同じにする必要があります。 PARAM codebase は、アプレットのコードベースを識別します。 Java Plug-in は、パラメータからこの情報を読み取ることができるため、アプレットまたは JavaBeans コンポーネントのダウンロード先を認識します。 パラメータ type は、APPLET タグからマッピングされることはありませんが、OBJECT タグでは必要になります。 これは、Java 実行可能ファイルのタイプ (アプレットまたは JavaBean など) を識別します。このため、Java Plug-in は Java 実行可能ファイルの初期化方法が認識されています。 上の例のこれら 3 つの PARAM タグ (codecodebase、および type) は、Java Plug-in で指定されます。これらのタグは、元の APPLET タグの PARAM には存在しません。 OBJECT タグ内の model パラメータは、APPLET タグ内の model パラメータと同一であることに留意してください。 Java Plug-in で指定するこれら最初の 3 つのパラメータ以外のパラメータは、APPLET タグ内のパラメータと同じです。

Java Plug-in 1.3 では、PARAM scriptable タグが新たに追加されました (1.4 でも有効)。 これが追加された理由は、JavaScript や VBScript を必要としないアプレットのパフォーマンス向上です。 アプレットがスクリプティングサポートを必要とする場合は true に、必要としない場合は false に値を設定する必要があります。 デフォルト値は false です。

PARAM scriptablePARAM mayscript と同じではないことに留意してください。 Mayscript は Java アプレットから JavaScript への通信のみをサポートするのに対し、scriptable は Internet Explorer での JavaScript から Java アプレットへの通信のみをサポートします。

APPLET タグ内のテキスト「No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!」は、<OBJECT> および </OBJECT> タグ内でマッピングされます。 本来、このテキストは、ブラウザが Java をサポートしない場合にのみ表示されます。 このテキストを OBJECT タグの内部にマッピングすると、ブラウザが OBJECT タグをサポートしない場合、このテキストが表示されます。

APPLET-OBJECT タグ属性のマッピングを、次に示します。

属性 APPLET タグのサポート OBJECT タグのサポート OBJECT タグでの属性マッピング
ALIGN O O ALIGN 属性
ALT O    
ARCHIVE O   archive パラメータ
CODE O O code パラメータ
CODEBASE O O codebase パラメータ
HEIGHT O O HEIGHT 属性
HSPACE O O HSPACE 属性
NAME O O NAME 属性、NAME パラメータ
OBJECT O   object パラメータ
TITLE O O TITLE 属性
VSPACE O O VSPACE 属性
WIDTH O O WIDTH 属性
MAYSCRIPT O O MAYSCRIPT パラメータ

OBJECT タグ独自の属性もあります。 これらの属性を次に示します。

属性/パラメータ OBJECT タグ内の意味
classid 属性

動的バージョンのサポートの場合は、同じ値 (clsid:8AD9C840-044E-11D1-B3E9-00805F499D93 など) を保持する必要があります。 静的バージョンのサポートの場合は、バージョン固有の値 (clsid:CAFEEFAC-0014-0000-0000-ABCDEFFEDCBA など) が保持されます。

注: このセクションの例では、動的バージョンを使用しています。

CODEBASE 属性 ネットワーク上の CAB ファイルを指し示す完全な URL を指定する必要があります。 デフォルトでは、Java ソフトウェア Web サイト上のページを指し示します。
type パラメータ Java アプレットの場合、値を「application/x-java-applet;jpi-version=1.4」または「application/x-java-applet」にする必要があります。 JavaBeans コンポーネントの場合、値を「application/x-java-bean;jpi-version=1.4」または「application/x-java-bean」にする必要があります。
codebase パラメータ アプレットのベース URL を指定します。 ドキュメントへの相対 URL を使用する必要があります。 この属性は省略可能です。
code パラメータ Java アプレットまたは JavaBeans コンポーネントの名前を指定します。 同じ OBJECT タグ内のパラメータ object と共に使用することはできません。
scriptable パラメータ JavaScript または VBScript を使用して、HTML ページからアプレットをスクリプト記述可能かどうかを指定します。 値には、「true」または「false」を指定できます。 これは、Java Plug-in 1.4 で新たに追加された属性です。
object パラメータ 直列化された Java アプレットまたは JavaBeans コンポーネントの名前を指定します。 同じ OBJECT タグ内のパラメータ code と共に使用することはできません。 この属性は省略可能です。
archive パラメータ Java Archive の名前を指定します。 この属性は省略可能です。
mayscript パラメータ アプレットに、netscape.javascript.JSObject へのアクセスを許可するかどうかを指定します。値は、「true」または「false」です。 この属性は省略可能です。

元の APPLET タグが PARAM typecodebasecodeobject、または archive を保持する場合、OBJECT タグへのマッピングによりパラメータ名が重複するため、問題が発生することに留意してください。 これを避けるため、Java Plug-in は次に示す他のパラメータ名セットもサポートします。

元のパラメータ名 新規パラメータ名
code java_code
codebase java_codebase
archive java_archive
オブジェクト java_object
type java_type

これらの新規パラメータ名は、必要な場合にのみ使用してください。 1 つの OBJECT タグに新規パラメータ名と元のパラメータ名の両方が存在する場合、Java Plug-in は常に新規パラメータ名と関連付けられた値を使用して、アプレットまたは JavaBean をロードします。

Windows または SolarisTM オペレーティング環境の Netscape Navigator で動作する Java Plug-in

Windows または Solaris オペレーティング環境の Netscape Navigator で Java Plug-in を使用するには、EMBED タグを使用します。 次の例では、APPLET タグを Java Plug-in の EMBED タグにマッピングします。

元の 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>

新規 EMBED タグ:

<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/products/plugin/1.4/plugin-install.html">
<NOEMBED>
   No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</NOEMBED>
</EMBED>

EMBED タグには APPLET タグと同様の情報が含まれます。Navigator で Java Plug-in を起動するには、この情報で十分です。 EMBED タグの type 属性は、Java プログラミング言語の実行可能ファイルタイプ (アプレットや Bean など) の識別に使用します。 Navigator が EMBED タグ内で属性を描画する際、ブラウザ内への Java Plug-in のロードを試みます。 type 属性を指定することにより、Java Plug-in は Java プログラミング言語の実行可能ファイルの初期化方法を識別します。

上の例では、EMBED タグ内の widthheight、および align などの属性は、APPLET タグ内の対応する属性から直接マッピングされます。 Navigator は、これらに含まれるフォーマット情報を利用して、Java Plug-in の位置を設定します。この情報は変更されることなく直接マッピングされるため、Java Plug-in を使用するアプレットの位置および外観は、APPLET タグを使用するアプレットと同じになります。

OBJECT タグとは異なり、すべての情報を PARAM を使用せずに<EMBED> タグの内部に格納する必要があります。 このため、APPLET タグ内のすべての情報およびパラメータを、EMBED タグ内の属性-値ペアとしてマッピングする必要があります。

上の例では、 APPLET タグの code および codebase 属性は、EMBED タグ属性にマッピングされます。 code 属性は、アプレットを識別します。 この属性の値は、APPLET タグの code 属性と同じにする必要があります。 codebase 属性は、アプレットのコードベースを識別します。 Java Plug-in は、この情報を属性から読み取ることができるため、アプレットまたは JavaBeans コンポーネントのダウンロード先を認識します。 EMBED タグ内の model 属性は、APPLET タグ内の model パラメータからマッピングされます。

OBJECT タグの codebase 属性と同様、Java Plug-in がインストールされていない場合には、EMBED タグの pluginspage 属性が Navigator により使用されます。 ここでは Java Software Web サイト上の Java Plug-in ダウンロードページを指します。あるいは、イントラネットでの配備の場合は、イントラネット上の Java Plug-in のダウンロードページを指すようにします。

APPLET タグ内のテキスト「No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!」は、<NOEMBED> および </NOEMBED> タグ内部にマッピングされます。 本来、このテキストは、ブラウザが Java テクノロジをサポートしない場合にのみ表示されます。 このテキストは NOEMBED タグ内部にマッピングされるため、ブラウザが EMBED タグをサポートしないか、Navigator が Java Plug-in の起動に失敗した場合に表示されます。

APPLET-EMBED タグ属性のマッピングを、次に示します。

属性
APPLET タグのサポート
EMBED タグのサポート
EMBED タグでの属性マッピング
ALIGN O O ALIGN 属性
ALT O O ALT 属性
ARCHIVE O   archive 属性
CODE O   code 属性
CODEBASE O   codebase 属性
HEIGHT O O HEIGHT 属性
HSPACE O O HSPACE 属性
NAME O O NAME 属性
OBJECT O   object 属性
TITLE O O TITLE 属性
VSPACE O O VSPACE 属性
WIDTH O O WIDTH 属性
MAYSCRIPT O O MAYSCRIPT 属性

EMBED タグ独自の属性もあります。 これらの属性を次に示します。

属性 EMBED タグ内の意味
type 属性 アプレットの場合、値を「application/x-java-applet;jpi-version=1.4」または「application/x-java-applet」にする必要があります。 Bean の場合、値を「application/x-java-bean;jpi-version=1.4」または「application/x-java-bean」にする必要があります。
codebase 属性 アプレットのベース URL を指定します。 この属性は省略可能です。
code 属性 Java アプレットまたは JavaBeans コンポーネントの名前を指定します。 同じ EMBED タグ内のパラメータ object と併用することはできません。
object 属性 直列化された Java アプレットまたは JavaBeans コンポーネントの名前を指定します。 同じ EMBED タグ内のパラメータ code と併用することはできません。 この属性は省略可能です。
archive 属性 Java Archive の名前を指定します。 この属性は省略可能です。
pluginspage 属性 ネットワーク上の HTML ページを指し示す完全な URL を指定する必要があります。
mayscript 属性 アプレットに、netscape.javascript.JSObject へのアクセスを許可するかどうかを指定します。値は、「true」または「false」です。 この属性は省略可能です。

OBJECT タグの場合と同様、元の APPLET タグが PARAM typecodebasecodeobject、または archive を保持する場合、これを EMBED タグ属性にマッピングすると問題が発生します。 これを避けるため、Java Plug-in は次に示す新規属性名のセットもサポートします。

元の属性名 新規属性名
code java_code
codebase java_codebase
archive java_archive
object java_object
type java_type

これらの新規属性名は、必要な場合にのみ使用してください。 1 つの EMBED タグに新規属性名と元の属性名の両方が存在する場合、Java Plug-in は常に新規属性名と関連付けられた値を使用して、アプレットまたは Bean をロードします。

IE および Navigator で動作する Java Plug-in

Windows または Solaris オペレーティング環境で HTML ページをブラウズする場合、IE の OBJECT タグおよび Navigator の EMBED タグを使用すると、HTML ページから Java Plug-in を利用できます。 ただし、HTML ページがインターネットやイントラネット上に配置されている場合、IE と Navigator の両方でページがブラウズされる可能性があります。 Navigator と IE の両方が 同じ HTML ページをブラウズする場合、Java Plug-in を起動する必要があります。 これは、次に示すように、Java Plug-in の OBJECT タグを使用して行います。

元の 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 Editoin v 1.4 support for APPLET!!
</APPLET>

新規 OBJECT タグ:

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="200" height="200" align="baseline"
    codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
<PARAM NAME="code" VALUE="XYZApp.class">
<PARAM NAME="codebase" VALUE="html/">
<PARAM NAME="type" VALUE="application/x-java-applet;jpi-version=1.4">
<PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
<PARAM NAME="scriptable" VALUE="true">
<COMMENT>
    <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/products/plugin/1.4/plugin-install.html">
    <NOEMBED>
    </COMMENT>
           No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
    </NOEMBED></EMBED>
</OBJECT>

IE は <OBJECT> タグを認識するため、Java Plug-in の起動を試みます。<COMMENT> タグは、IE だけが理解する特殊な HTML タグであることに留意してください。 IE は、<COMMENT></COMMENT> タグの間のテキストを無視します。 実際のところ、上記のタグは次のようになります。

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="200" height="200" align="baseline"
    codebase="http://java.sun.com/products/plugin/1.4/jinstall-14-win32.cab#Version=1,4,0,mn">
    <PARAM NAME="code" VALUE="XYZApp.class">
    <PARAM NAME="codebase" VALUE="html/">
    <PARAM NAME="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!!
    </NOEMBED></EMBED>
</OBJECT>

これは、すでに概要を説明した OBJECT タグの例と同一です。 対応する <NOEMBED> および <EMBED> タグが存在しないため、OBJECT タグは </NOEMBED> および </EMBED> タグを無視します。

Navigator は OBJECT および COMMENT タグを認識しないため、Windows 95、Windows 98、Windows NT 4.0、または Solaris オペレーティング環境の Navigator 3/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/products/plugin/1.4/plugin-install.html">
<NOEMBED>
    No Java 2 SDK, Standard Edition v 1.4 support for APPLET!!
</NOEMBED>
</EMBED>

これは、すでに概要を説明した EMBED タグの例と同一です。 <COMMENT> および </COMMENT> タグは IE のみの HTML 拡張機能であるため、Navigator 3/4 はこれらのタグを無視します。

この例は、IE と Navigator のどちらが使用される場合でも、結合された OBJECT-EMBED タグを使用して、ブラウザ内で Java Plug-in を起動できることを示します。 ユーザが単一の環境で HTML ページをブラウズするのでない限り、この結合されたタグを使用することを強くお勧めします。 Sun Microsystems の提供する Java Plug-in HTML コンバータを使用すると、HTML ページがこのタグスタイルに自動的に変換されます。

その他の環境での Java Plug-in

インターネットまたはイントラネット環境では、異なるプラットフォームのブラウザで 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/products/plugin/1.4/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/products/plugin/1.4/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 ドキュメントごとに、この操作を行います。

スクリプトの 2 番目のブロックでは、APPLET タグを置き換えています。 各 APPLET タグを、類似のコードブロックで置き換える必要があります。 このスクリプトは、APPLET タグを、ブラウザに応じて EMBED タグまたは OBJECT タグに置き換えます。 IE には OBJECT タグを、Netscape Navigator には EMBED タグを使用します。 最後に、元の APPLET タグが、コメントとして末尾に含まれます。 Java Plug-in の呼び出しを削除する場合のことを念頭において、元の APPLET タグを含めておくのは望ましい方法です。

最初の JavaScript により、ブラウザおよびブラウザの稼動するプラットフォームが確立されます。 この操作が必要なのは、現在のところ、Java Plug-in は、Windows 95、Windows 98、Windows NT 4.0、および Solaris のみをサポートするためです。 Java Plug-in がサポートしない Win32 プラットフォームは、Windows NT 3.51 だけです。 Java Plug-in の呼び出しは、サポートされるブラウザおよびプラットフォームでのみ行う必要があります。 ブラウザが Internet Explorer の場合、スクリプトにより変数 _ie が true に設定されます。 ブラウザが Navigator の場合、変数 _ns が true に設定されます。 (JavaScript ではすべての変数名が「_」で始まることに注目してください。 これは、同じページの他の JavaScript 変数と競合することを防ぐためです。)

適切なブラウザを検出するため、JavaScript は Navigator オブジェクト内の 3 つの文字列 userAgentappVersion、および appName を評価します。 これらの文字列には、ブラウザおよびプラットフォームに関する情報が含まれます。 文字列 userAgent の例をいくつか見てみるなら、userAgent を評価してブラウザを判別する方法を理解できるでしょう。 以下に、Internet Explorer で表示される異なるプラットフォーム用の userAgent 文字列の例を示します。

プラットフォームおよびブラウザ 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 NT 4.0 および IE 3.02 "Mozilla/2.0 (compatible; MSIE 3.02; Windows NT)"
Windows 95 および IE 4.0 "Mozilla/4.0 (compatible; MSIE 4.0; Windows 95)"
Windows 95 および IE 3.02 "Mozilla/2.0 (compatible; MSIE 3.02; 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)"
Windows NT 4.0 および Navigator 3.04 "Mozilla/3.04 (WinNT; I)"
Windows NT 3.51 および Navigator 4.04 "Mozilla/4.04 [en] (WinNT; I)"
Windows NT 3.51 および Navigator 3.04 "Mozilla/3.04 (WinNT; I)"
Windows 95 および Navigator 4.03 "Mozilla/4.03 [en] (Win95; I)"
Windows 95 および Navigator 3.03 "Mozilla/3.03 (Win95; 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 で稼動する IE では、userAgent 文字列に部分文字列「Windows 3.1」が含まれます。これらのプラットフォームの IE は 16 ビットであるためです。 IE 4 は Solaris および Mac でも動作しますが、これらのバージョンでは userAgent 文字列に部分文字列「Win」は含まれません。 また、Windows CE で稼動する IE は、JavaScript をサポートしません。 これらは、次のようにまとめることができます。

userAgent 文字列/ブラウザ Windows 3.1 上の IE 3/4 Windows NT 3.51 上の IE 3/4 Windows 95 上の IE 3/4 Windows NT 4.0 上の IE 3/4 Windows CE 上の IE Mac 上の IE UNIX 上の IE いずれかのプラットフォームで稼動する他のブラウザ
「MSIE」を含む O O O O O O
「Win」を含む O O O O
「Windows 3.1」を含まない O O O O O

上の表から、Windows 95 および Windows NT 4.0 上で稼動する IE だけが Java Plug-in ブラウザおよびプラットフォーム要件を満たすことがわかります。 ただし、これは、IE の将来のリリース、または IE を含む将来の Windows のリリースを考慮に入れていません。 Win32 で稼動する IE の将来のリリースでも、userAgent 文字列に「MSIE」および「Win」が含まれる限り、上記のコードは動作します。

上記のロジックをまとめると、次のようになります。

<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 を実行するには、Navigator で LiveConnect を使用して、OS のバージョン番号を判別する必要があります。 これらは、次のようにまとめることができます。

テストロジック/ブラウザ Windows 3.1 上の NS 3/4 Windows NT 3.51 上の NS 3/4 Windows 95 上の NS 3/4 Windows NT 4.0 上の NS 3/4 Solaris 上の NS Solaris 上の IE 他のプラットフォーム上の NS 他のプラットフォーム上の IE いずれかのプラットフォームで稼動する他のブラウザ
appName に「Netscape」を含む O O O O O O
userAgent に「Win」を含む O O O O O
userAgent に「Win16」を含まない O O O O O
os.version に 3.5 を含まない O O O OS に依存
userAgent に「Sun」を含む 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 オペレーティング環境で稼動する Navigator だけです。 LiveConnect は OS のバージョン番号の取得に使用され、Navigator だけが LiveConnect をサポートするため、LiveConnect にアクセスする JavaScript は IE からは認識されません。 これが問題となるのを防ぐには、IE 固有のコメントタグである COMMENT タグを使用して、このスクリプト部を遮断します。 IE は COMMENT タグ内のテキストを無視しますが、Navigator は無視しません。 また、ブラウザが Navigator 2 の場合、スクリプト言語を JavaScript1.1 と指定してこれを遮断する必要があります。

これまでの IE および 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 本文ごとに 1 回だけ必要になります。

HTML タグの 2 番目のブロックは、対応する OBJECT および EMBED タグです。これらのタグは、APPLET タグ内のデータからマッピングされます。 ブラウザが Windows 95、Windows 98、または Windows NT 4.0 オペレーティング環境で稼動する IE の場合、JavaScript は OBJECT タグを出力することに留意してください。 ブラウザが Windows 95、Windows 98、Windows NT 4.0、または Solaris オペレーティング環境で稼動する Navigator 3/4 の場合、JavaScript は EMBED タグも (わずかに異なる構文で) 出力します。 ブラウザおよびプラットフォームの検出メカニズムは、前述のセクションで解説済みです。 (HTML では、コメントに <!-- and --> タグが使用されます。)

元の 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/products/plugin/1.4/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/products/plugin/1.4/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">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> 

元の APPLET タグも、新規 Java Plug-in タグにマッピングされることに留意してください。 これは、Java Plug-in を、サポートされるプラットフォームでのみ使用することを意図しているためです。 スクリプト内に APPLET タグを残しておくことにより、Java Plug-in をサポートしないブラウザや JavaScript をサポートしないブラウザが、デフォルトの JVM を使用してアプレットを適切に処理できるようになります。 Java Plug-in をサポートしないプラットフォームの HotJava ブラウザ、IE、および 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/">
<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> 

これらのブラウザは、対応する <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」というメッセージが表示されます。

前の例とは異なり、マッピングされた PARAM 名には、codecodebasetype の代わりに、java_codejava_codebasejava_type が含まれます。 これが必要な理由は、<APPLET></APPLET> タグ内部の <PARAM>code および codebase を指定すると、ブラウザによっては問題が発生するためです。

Windows 上の IE は、タグを次のように読み取ります。

<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
    width="200" height="200" align="baseline"
codebase="http://java.sun.com/products/plugin/1.4/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="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> 

<XMP> タグを使用する場合は、注意が必要です。 IE は <OBJECT> タグを描画するため、<APPLET> タグを無効にする必要があります。 無効にしない場合、2 つのアプレットがブラウザに同時に表示されます。1 つのアプレットは Microsoft の JVM で、もう 1 つのアプレットは Sun の JVM で Java Plug-in を使用して稼動します。<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/products/plugin/1.4/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;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!!
</OBJECT> 

これは、すでに概要を説明した OBJECT タグの例と同一です。 <OBJECT> タグは、<NOEMBED></NOEMBED>、および </EMBED> タグを無視することに留意してください。

Windows オペレーティング環境で動作する Navigator は、タグを次のように読み取ります。

<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/products/plugin/1.4/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>

<APPLET> タグも無効にするため、<XMP> タグが <EMBED> タグ内で再度使用されている点に注目してください。 <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/products/plugin/1.4/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 ページをブラウズする場合にのみ使用してください。

まとめ

このドキュメントでは、Java Plug-in の使用する OBJECT タグおよび EMBED タグのスタイルについて説明しました。特に、APPLET タグから OBJECT および EMBED タグへの変換に焦点を当てて解説しました。 現在のところ、HTML 4.0 では、HTML ページに Java アプレットおよび JavaBeans コンポーネントを挿入する方法としては、OBJECT タグが最良の選択肢です。 このドキュメントが近い将来更新される際には、OBJECT タグを Java Plug-in のタグスタイルに変換する必要が生じてくることでしょう。 このドキュメントで公開した情報の目的は、HTML 移行ツールを記述する ISV、および Java Plug-in に移行しようとしている Web マスターを支援することです。 このドキュメントで説明したタグスタイルは、将来変更される可能性があります。

Java Plug-in の使用は、このドキュメントで説明したタグスタイルに限定されていません。 実際、Web マスターには、必要に応じてタグスタイルを変更することや、タグを JavaScript と組み合わせることが勧められています。 このドキュメントで解説した OBJECT タグを IE で、また EMBED タグを Navigator で使用する限り、Java Plug-in の実行には何の問題もありません。現在のところ、Java Plug-in HTML コンバータにはいくつかの変換テンプレートが同梱されています。 Web マスターは、その中から自らのニーズに合ったテンプレートを見つけることができます。また、必要に応じてこれらのテンプレートを修正することも勧められています。