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

2.3.15 JavaScriptとの通信

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

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

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


JBKプラグインはJSObjectを制限付きでサポートします。JSObject経由で次のJavaScriptオブジェクトへアクセスできます。

Anchor/Applet/Array/Boolean/Button/Checkbox/Date/document/Element/Fileupload/Form/
Frame/Function/Hidden/History/Image/Link/Location/Math/navigator/Number/Object/
Option/Password/Radio/RegExp/Reset/screen/Select/String/Submit/Text/TextArea/Window

JSObjectの使用例

アプレットからJSObjectを使用してJavaScriptの呼び出しを行うには次のように行います。

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

public class Applet1 extends Applet {
     public void init() {

            JSObject win = JSObject.getWindow(this);

            try{
                 //JavaScriptのWindowオブジェクトのメソッドalertを呼び出し
                 win.call("alert",new Object[]{"Test"});

                 // JavaScriptのWindowオブジェクトのプロパティstatusの設定
                 win.eval("this.status=\"Hello World\"");

                 /* document.forms[0].elements[0]は<INPUT TYPE=button>です */

                 //上記のbuttonを参照し、そのプロパティであるvalueに「ボタン」を設定
                 JSObject doc = (JSObject) win.getMember("document");
                 JSObject forms = (JSObject) doc.getMember("forms");
                 JSObject aform = (JSObject) forms.getMember("0");
                 JSObject elememts = (JSObject) aform.getMember("elements");
                 JSObject script_button = (JSObject) elememts.getMember("0");
                 script_button.setMember("value","ボタン");

            //JSObjectの例外処理を行います
            }catch(JSException e){
                 e.printStackTrace();
            }
     }
}

上記アプレットから呼び出されるフォームを持つHTMLの例は以下のようになります。

[HTMLファイル]

<HTML>
<HEAD>
<SCRIPT src="JBKTag.js" type="text/javascript" language="JavaScript">
</SCRIPT>
</HEAD>
<BODY>

<FORM>
<INPUT TYPE=button value="button">

</FORM>
<SCRIPT type="text/javascript" language="JavaScript"> <!-- //JavaScriptを使用し、アプレットを表示するタグを記述します。 showapplet(); //--> </SCRIPT> </BODY> </HTML>

[JavaScriptファイル(JBKTag.js)]

function showapplet() {
    document.writeln('<OBJECT CLASSID="CLSID:BEA62964-C40B-11D1-AACA-00A0C9216A67" WIDTH=100 HEIGHT=100>');
    document.writeln('<PARAM NAME="TYPE" VALUE="application/x-JBK-Plugin">');
    document.writeln('<PARAM NAME="NAME" VALUE="sample">');
    document.writeln('<PARAM NAME="CODE" VALUE="Applet1.class">');
    document.writeln('<PARAM NAME="color" VALUE="blue">');
    document.writeln('<PARAM NAME="useDefault" VALUE="true">');

    document.writeln('</OBJECT>');
}

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

注意

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

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

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

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

  • Dateオブジェクトの以下のメソッドの返り値の型はDoubleです。

    • getYear

    • getMonth

    • getDate

    • getHours

    • getMinutes

    • getSeconds

    • getDay

    • getTimezoneOffset

注意

アプレットからJavaScriptを呼び出す場合は、Javaの呼び出しメソッド内で排他制御されます。

参考

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");
     }
}

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

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

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

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();
        }
    }
}