Sun Java Solaris Communities My SDN Account Join SDN
 
How Java to Javascript Communication Works in Java Plug-in

 

 


Java Plug-in のホームページ | Java Plug-in コントロールパネル  
その他の Java Plug-in 関連ドキュメント  
- はじめに
- Java Plug-in での JSObject のサポートレベル
- Java Plug-in での JSObject サポートの有効化
- まとめ

はじめに

Java アプレットは、Document Object Model (DOM) へのアクセスや HTML ページ上での JavaScript 機能の呼び出しに、Java から JavaScript への通信を必要とする場合があります。Internet Explorer および Navigator は、Java ラッパークラスである netscape.javascript.JSObject を使って Java から JavaScript への通信を可能にします。詳細は、Java packages for LiveConnect のドキュメントを参照してください。各 JSObject は、JavaScript 環境で DOM のエンティティをカプセル化します。

ブラウザによって DOM の実装が異なるため、Java Plug-in 1.3 は Internet Explorer および Navigator で提供する JSObject サポートレベルが異なります。このドキュメントは、異なるブラウザ環境で JSObject サポートがどのように機能するかを説明します。 

JSObject の動作

Java Plug-in は、さまざまな Win32 プラットフォームおよび Solaris プラットフォームで稼働する Internet Explorer および Netscape Navigator をサポートします。JSObject を使用すると、HTML ページの DOM へ容易にアクセスできます。ブラウザによって DOM の実装方法が異なるため、Java アプレットで JSObject を使用する場合、ブラウザ内の DOM の実装の違いにより、Java Plug-in 内での JSObject の動作が異なる場合があります。ブラウザでの 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
     }
}

JSObject 内ではすべて static メソッドで開始されます。

public static JSObject getWindow(Applet a) 

上の文は、指定されたアプレットを含むウィンドウ用の JavaScript の Window オブジェクトを表す JSObject を返します。このメソッドは java.awt.Applet だけをパラメータとして取るため、アプレットから JSObject へアクセスできますが、Bean もアプレットでない限り、Bean からアクセスすることはできません。

この Window JSObject の取得後に、アプレットは次のメソッドを使って HTML ページの DOM をナビゲートできます。

  • public Object call(String methodName, Object args[])
  • public Object eval(String s)
  • public Object getMember(String name)
  • public Object getSlot(int index)
  • public void removeMember(String name)
  • public void setMember(String name, Object value)
  • public void setSlot(int index, Object value)
  • public String toString()

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

JSObject の使用に関する詳細は、LiveConnect のドキュメントを参照してください。

Java コードをコンパイルして JSObject を利用するためには、CLASSPATH にパッケージ netscape.javascript を含める必要があります。現在のところ、Java Plug-in 1.3 には JAR ファイル JAWS.JAR 内の netscape.javascript が含まれます。JSObject を使用するアプレットをコンパイルする場合、コンパイル前に CLASSPATH に JAWS.JAR を追加してください。

Java Plug-in 1.3 は JSObject をサポートしますが、Java 2 platform, Standard Edition v 1.3 の AppletViewer ではサポートしません。このため、JSObject を使用するアプレットは AppletViewer では動作しないか、例外が発生します。

Java Plug-in での JSObject のサポートレベル

Internet Explorer: Java Plug-in は、COM 経由で DOM にアクセスすることにより、IE 3/4 の JSObject をフルサポートします。

Netscape Navigator: Java Plug-in は、Netscape の Plug-in API 経由で DOM にアクセスすることにより、Navigator 3/4 の JSObject を制限付きでサポートします。現在、Navigator 3 では、JSObject 経由で次の JavaScript オブジェクトへアクセスできます。

  • Anchor
  • Document
  • Element
  • Form
  • Frame
  • History
  • Image
  • Link
  • Location
  • Navigator
  • Option
  • URL
  • Window

Navigator 4 では、上記の JavaScript オブジェクトをすべてサポートします。さらに、次のオブジェクトもサポートします。

  • Layer
  • UIBar

ここで言及されていない他のすべての JavaScript オブジェクトは未サポートであり、JSObject 経由で未サポートのオブジェクトにアクセスすると Java で例外が発生します。

異なるブラウザが同じ JavaScript オブジェクトをサポートする場合でも、JavaScript オブジェクトがサポートするメソッドおよびプロパティは異なる場合があります。詳細は、使用するブラウザ用の JavaScript 開発ガイドを参照してください。

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 1.3 HTML の仕様」を参照してください。


まとめ

Java Plug-in 1.3 は、JSObject を経由した、Java から JavaScript への通信をサポートします。これにより、Java Plug-in 内で実行中のアプレットは Document Object Model にアクセスしたり、HTML ページとの対話および統合のレベルを高めることができます。