ページの先頭行へ戻る
Interstage Studio J Business Kit 解説書
FUJITSU Software

2.3.15 JavaScriptとの通信

JBKプラグインが提供するJavaScript対応機能を説明します。

JBKプラグインでは、Internet ExplorerでJavaScript対応機能をサポートします。以下の内容で、JavaScript対応機能の利用方法を説明します。

2.3.15.1 アプレットからのJavaScript呼出し

アプレットがJavaScript呼び出しを行うためには、JavaからJavaScriptへの通信を必要とします。JBKプラグインは、Internet Explorerを利用している場合にはJavaラッパークラスである netscape.javascript.JSObjectを使ってJavaからJavaScriptへの通信を可能にします。

JSObjectクラス及びJSExceptionクラスは、JBKプラグインの開発用jarファイルに格納されています(JBKをインストールしたフォルダの下の“classes\jbkstd.jar”になります)。これらのクラスを使用したアプレットのクラスをコンパイルする場合は、クラスパスにJBKプラグインの開発用jarファイルが含まれていることを確認してください。

注意

Internet ExplorerとOSの制限に関連した注意事項

  • window, documentオブジェクト以外では、setMemberメソッドは使用できません。

  • windowオブジェクト以外ではevalメソッドは使用できません。

  • Windowx XP SP2の制限により、以下の場合、ローカルファイルを相対パスで設定した場合、エラーとなります。絶対パスとすると、動作します。

    • windowオブジェクトのopenメソッドでローカルファイルを開く時

    • windowオブジェクトのlocationプロパティでローカルファイルを設定する時

  • getMemberでプロパティが獲得出来ない場合があります。

  • Dateオブジェクトの以下のメソッドの返り値の型がNetscapeではIntegerだが、Internet ExplorerではDoubleです。

    • getYear

    • getMonth

    • getDate

    • getHours

    • getMinutes

    • getSeconds

    • getDay

    • getTimezoneOffset

参考

JSObjectは、JavaScriptの配列アクセスをサポートします。アプレットからJSObejctを使用して配列にアクセスするには次のように行います。

import netscape.javascript.*;
import java.applet.*;

public class Applet1 extends Applet {

     public void init() {
            JSObject win = JSObject.getWindow(this);

            /* 配列はarrayname = new Array("0","1","2",…)と設定 */

            //JavaScriptのArrayオブジェクトを参照
            JSObject array = (JSObject)win.getMember("arrayname");
            //配列の要素数を参照
            (Integer)array.getMember("length");
            //JavaScriptの配列要素番号0を参照
            (String)array.getMember("0");
     }
}

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

JBKプラグインは、JavaScriptからアプレットのpublicメソッドの呼出しを行うことができます。

呼び出されたpublicメソッドにオーバーロードされたメソッドがある場合は、オーバーロードされたメソッドのうちどれが呼び出されるか保証されません。

2.3.15.3 Cookieアクセス

アプレットでのCookie利用方法を説明します。

JBKプラグイン上で動作させるアプレットは、JSObjectを利用して取得できるJavaScriptのdocumentオブジェクトが持つcookieプロパティを参照または設定することにより、Cookieを利用することができます。

アプレットからJSObjectでCookieを取得し、そのCookieをサーバへ送信する。

import java.applet.*;
import java.net.*;
import netscape.javascript.*;

public class Applet1 extends Applet {
    public void init(){
        JSObject win = JSObject.getWindow(this);

        //JavaScriptのdocumentオブジェクトのcookieを参照
        JSObject doc = (JSObject)win.getMember("document");
        String cookie = (String)doc.getMember("cookie");

        try{
            /* クッキー送信先のURLを設定 */
            //アプレットの基底URLを取得
            URL url = getCodeBase();
            String strurl = url.toString();

            //送信先へのPathを設定
            /* ここでは/servlet/cookieとします */
            strurl = strurl + "/servlet/cookie";
            url = new URL(strurl);

             //クッキーを設定
             HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
             urlCon.setRequestProperty( "cookie" , cookie );

             //送信先への接続を切断
             urlCon.disconnect();

             /* ここにHttpURLConnectionを利用した記述を行います */

        }catch( Exception e )
             e.printStackTrace();
        }
    }
}