Java

LiveConnect のサポート
JavaSE 6u10 用

ドキュメント の目次

アプレット開発者ガイド > LiveConnect のサポート

目次


はじめに

LiveConnect 仕様は、アプレット内の Java コードが Web ページ内の JavaScript と通信したり、その逆の通信を行ったりするための方法を定義します。アプレットで定義されたメソッドは、HTML ページで定義された JavaScript を呼び出すことができます。また、JavaScript も、アプレットやその他の Java 実行時ライブラリで定義されたメソッドを呼び出すことができます。

LiveConnect のサポートは、下位互換性を念頭において強化されています。static Java メソッドを呼び出したり、新しい Java オブジェクトをインスタンス化したり、JavaScript からサードパーティーのパッケージを参照したりする機能などの、以前は Mozilla に特有であった LiveConnect 機能が現在、すべてのブラウザで使用できます。

アプレットからの JavaScript 関数の呼び出し

Netscape.javascript.JSObject クラスを使用すると、アプレット内の Java コードと HTML ページ内の JavaScript の間の通信が可能になります。このクラスは、jre/lib 内のほかの jar とともに plugin.jar ファイルに存在します。このクラスにアクセスするには、コンパイルのクラスパスに plugin.jar ファイルを追加します。

Java アプレットは、Java から JavaScript への通信を行って Document Object Model (DOM) にアクセスするか、HTML ページ上で JavaScript 関数を呼び出す必要があります。ブラウザを使用すると、Java ラッパークラス netscape.javascript.JSObject を介した Java と JavaScript 間の通信が可能になります。

ブラウザ間で JavaScript 描画エンジンの実装が異なるため、Java Plug-in が提供する JSObject サポートは、Internet Explorer と Navigator で異なります。このドキュメントでは、異なるブラウザ環境で JSObject サポートがどのように機能するかを説明します。

JSObject の動作方法

JSObject を利用すると、HTML ページの DOM へのアクセスが容易になります。ただし、ブラウザが異なると DOM の実装方法も異なるため、Java アプレットで JSObject を使用すると、Java Plug-in の動作がブラウザによって異なる場合があります。特定のブラウザでの DOM 実装の詳細は、ブラウザの開発者ガイドを参照してください。

一般に、アプレットは次の方法で JSObject にアクセスします。

import netscape.javascript.*;
import java.applet.*;
import java.awt.*;
class MyApplet extends Applet {
     public void init() {
         JSObject win = JSObject.getWindow(this);
         JSObject doc = (JSObject) win.getMember("document");
         JSObject loc = (JSObject) doc.getMember("location");

         String s = (String) loc.getMember("href");  // document.location.href
         win.call("f", null);                      // Call f() in HTML page
     }
}

開始位置は、static メソッドです。

public static JSObject getWindow(Applet a) 
  

このメソッドにより、指定されたアプレットを含む Window を表す JSObject が返されます。このメソッドは、パラメータとして java.applet.Applet のみを取るため、アプレットから JSObject にアクセスできますが、Bean がアプレットでない限り、Bean からアクセスすることはできません。

Window オブジェクトの取得が完了したら、アプレットは次のメソッドを使用して HTML ページの DOM をナビゲートできます。

Java Plug-in では、getWindow()call()eval()setMember()、および getMember() だけを使用することをお勧めします。getSlot()setSlot()removeMember()、および toString() の実装はブラウザに依存するため、実行結果は、Java Plug-in が稼動しているブラウザのバージョンおよびプラットフォームにより異なります。

Java コードをコンパイルして JSObject を利用するには、CLASSPATH 内に netscape.javascript パッケージを保持する必要があります。Java Plug-in 1.4.2 以降は、JAR ファイル plugin.jar 内に netscape.javascript が含まれています。JSObject を使用するアプレットをコンパイルするには、コンパイルする前に、 CLASSPATHplugin.jar を追加する必要があります。

JSObject は、Java Plug-in ではサポートされますが、Java SE プラットフォームの AppletViewer ではサポートされないことに留意してください。このため、JSObject を使用するアプレットは、AppletViewer では動作しないか、例外が発生します。

Java Plug-in での JSObject サポートの有効化

セキュリティー上の理由で、Java Plug-in の JSObject サポートは、デフォルトでは無効に設定されています。Java Plug-in の JSObject サポートを有効にするには、次に示すように、EMBED/OBJECT タグ内に新規属性 MAYSCRIPT が存在する必要があります。

元の APPLET タグ: 

<APPLET code="XYZApp.class" codebase="html/" align="baseline"
     width="200" height="200" MAYSCRIPT>
<PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
     No JDK 1.3 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.3/jinstall-13-win32.cab#Version=1,3,0,0">
     <PARAM NAME="code" VALUE="XYZApp.class">
     <PARAM NAME="codebase" VALUE="html/">
     <PARAM NAME="type" VALUE="application/x-java-applet;version=1.3">
     <PARAM NAME="MAYSCRIPT" VALUE="true">
     <PARAM NAME="model" VALUE="models/HyaluronicAcid.xyz">
        No JDK 1.3 support for APPLET!!
</OBJECT>

新規 EMBED タグ:

<EMBED type="application/x-java-applet;version=1.3" width="200"
   height="200" align="baseline" code="XYZApp.class"
   codebase="html/" model="models/HyaluronicAcid.xyz" MAYSCRIPT=true
   pluginspage="http://java.sun.com/products/plugin/1.3/plugin-install.html">
<NOEMBED>
   No JDK 1.3 support for APPLET!!
</NOEMBED>
</EMBED>

MAYSCRIPT が false に指定されているか、MAYSCRIPT が存在しない場合、JSObject は無効になります。EMBED/OBJECT タグ内の MAYSCRIPT 属性の詳細は、「Java Plug-in での OBJECTEMBED、および APPLET タグの使用」を参照してください。
          

JavaScript および LiveConnect は、Netscape Communications Corporation のテクノロジです。Mozilla および Microsoft で実装される Javascript エンジンが異なっているため、LiveConnect を使用した Java と JavaScript 間のデータ整列化によって、ブラウザ間で異なるデータ型が生成されることがあります。ベンダー間での JavaScript 実装の主な相違点は、JavaScript データ型のサポート、Java と JavaScript 間でのデータ型のマッピング、および DOM 要素の実装です。

JSObject およびデータ型の変換を含む Java から JavaScript への通信の詳細は、次を参照してください。

 

JavaScript からのアプレットメソッドの呼び出し

スクリプトを使用して、アプレットのメソッドを呼び出す多くの機会があります。一例として、クリックするとアニメーションを開始する HTML ボタンを挙げることができます。これは、HTML タグ、HTML ファイル内のスクリプト、およびアプレット内部での実際のコード記述を組み合わせることで実現できます。

アプレットの HTML ページに、以下を含める必要があります。

これらのタグについて、以下で説明します。

アプレットの指定

HTML ページの OBJECT タグで、ID パラメータを指定する必要があります。OBJECT タグには、classidwidthheight などのパラメータが含まれることを思い出してください。

ID パラメータは、アプレットの記号名です。ID パラメータを使用してアプレットの記号名が確立されると、以降は、この名前を利用してアプレットを参照できます。

たとえば、Fractal と呼ばれるアプレットを保持している場合を考えましょう。OBJECT タグに ID パラメータを追加して、ID をアプレットの記号名に設定します。次のようにタグを設定できます。

ID="Fractal"
  

 

これで、スクリプト内で Fractal という名前を使用して、Fractal アプレットを参照できます。

この Fractal アプレットの例を使用する場合、HTML ページには、最初に FORM タグ、次に OBJECT タグが記述されます。次に、これらのタグを示します。

<form name="Form1">
<OBJECT ID="Fractal" WIDTH=500 HEIGHT=120
CLASSID="CLSID:8AD9C840-044E-11d1-B3E9-00805F499D93"
<PARAM NAME="code" value="CLSFractal.class">
<PARAM NAME="codebase" value="1.0.2">
<PARAM NAME="level" value="5">
...
</OBJECT>

操作とスクリプトの関連付け

HTML ページで定義されたコンポーネントの目的は、ユーザーによりトリガーされた操作を呼び出すことです。これらのコンポーネントの定義には、INPUT タグを使用します。コンポーネントの TYPE タイプ (buttonNAME、および VALUE) を指定します。ボタンまたは他のコンポーネントから目的の操作を呼び出すために、以下を指定するタグを追加する必要があります。

たとえば、HTML ページにより作成されたボタンをクリックすると、特定のアニメーションが開始される場合を考えてみましょう。HTML タグによりボタンが作成され、ボタンに名前と値 (ラベル) が与えられます。

これを実行するには、2 つのタグを追加します。1 つのタグは、特定の操作 (onclick など) の実行時に、対応するスクリプトメソッドが呼び出されることを示します。タグは、onClick="method name" という形式になります。メソッド名は、同じ HTML ページ内のスクリプトメソッドです。

したがって、HTML ページに次のように記述できます。

<input type="button" name="Button1" value="Start"
onClick="startJSFractal" language="JavaScript">

この INPUT タグによりボタンが作成され、ボタン名が「Button1」、値 (ボタン上に表示されるラベル) が「Start」に指定されます。このタグにより、ユーザーがボタンをクリックすると呼び出されるスクリプトメソッド、およびスクリプトメソッドの言語も指定されます。この例では、スクリプトメソッドは startJSFractal、スクリプト言語は JavaScript です。ユーザーがこのボタンをクリックすると、HTML ページが拡張され、JavaScript で記述されたスクリプトメソッド startVBFractal が呼び出されます。

Script タグおよびメソッド

onClick タグで指定したメソッド (関数) には SCRIPT タグを含める必要があります。SCRIPT タグには、onClick タグで使用される名前と同じ名前を指定する必要があります。このタグは、スクリプト言語を指定するパラメータも保持します。さらに重要なこととして、スクリプトメソッドは、Java アプレットメソッドを呼び出します。これは、メソッドの識別に、ID タグで指定されたアプレット名、次にアプレットコード内で実装された実際のメソッドを名を使用します。

たとえば、同一の HTML ページは、次の SCRIPT タグを保持します。

<SCRIPT language="JavaScript">
function startJSFractal() {
        document.Form1.Fractal.startFractal()
}
</SCRIPT>

この例の SCRIPT タグでは、スクリプト言語が JavaScript であることが最初に指定されています。次に JavaScript の function 文が続きます。この文では、スクリプトメソッドが最初に定義されています。function 文では、スクリプトメソッドのラベルまたは名前が startJSFractal として指定されています。この名前は、入力コンポーネントの action パラメータに指定されたメソッド名と一致している必要があります。

この例では、onClick パラメータおよび function 文の両方で、同じスクリプトメソッドが指定されています。スクリプトメソッド startJSFractal は、アプレットコード内で実装された実際のメソッド startFractal() を呼び出すだけです。これは、メソッド名を、ドキュメントフォーム名、アプレット名 (OBJECT ID)、メソッド名の順に使用して修飾した名前です。

document.Form1.Fractal.startFractal()

 

 


Copyright © 2008 Sun Microsystems, Inc. All Rights Reserved.
フィードバック

Sun
Java Technology