JBKプラグインが提供するJavaScript対応機能を説明します。
JBKプラグインでは、Internet ExplorerでJavaScript対応機能をサポートします。以下の内容で、JavaScript対応機能の利用方法を説明します。
アプレットがJavaScript呼び出しを行うためには、JavaからJavaScriptへの通信を必要とします。JBKプラグインは、Internet Explorerを利用している場合にはJavaラッパークラスである netscape.javascript.JSObjectを使ってJavaからJavaScriptへの通信を可能にします。
クラス名:
netscape.javascript.JSObject
(extends java.lang.Object)
メソッド:
getWindow
JavaScriptへの通信を可能にするJSObjectのインスタンス(指定されたアプレットを含むウィンドウのJavaScriptにおけるWindowオブジェクト)を返します。このメソッドはjava.applet.Appletだけをパラメータとして取ります。
public static JSObject getWindow(java.applet.Applet a) |
call
JavaScriptのメソッドを呼び出します。
public Object call(String methodName, Object args[]) |
eval
JavaScriptの式を評価します。
public Object eval(String s) |
getMember
JavaScriptの名前付きプロパティを取得します。
public Object getMember(String name) |
getSlot
インデックス付きプロパティを取得します。
public Object getSlot(int index) |
setMember
名前付きプロパティを設定します。
public void setMember(String name, Object value) |
setSlot
インデックス付きプロパティを設定します。
public void setSlot(int index, Object value) |
toString
JSObjectを文字列に変換します。
public String toString() |
removeMember
サポートされていません。
public void removeMember(String name) |
Java packages for LiveConnectの仕様ではremoveMemberがありますが、JBKプラグインでは未サポートとなります。
JSObjectのサポートレベル
JBKプラグインはJSObjectを制限付きでサポートします。JSObject経由で次のJavaScriptオブジェクトへアクセスできます。
Anchor/Applet/Array/Boolean/Button/Checkbox/Date/document/Element/Fileupload/Form/ |
Functionオブジェクトのarguments.length、arguments[]、callerプロパティは使用できません。
アプレットから、Arrayオブジェクトのcontactメソッドのような引数に、オブジェクト名を指定するメソッドを呼び出す場合は、JSObjectのevalメソッドを使用してください。
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> |
[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メソッドは使用できません。
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"); } } |
JBKプラグインは、JavaScriptからアプレットのpublicメソッドの呼出しを行うことができます。
呼び出されたpublicメソッドにオーバーロードされたメソッドがある場合は、オーバーロードされたメソッドのうちどれが呼び出されるか保証されません。
メソッド呼出しのための設定
JavaScriptからアプレットのメソッド呼出しを行う場合には、jbkplugin.propertiesの中に以下の行を記述してください。
jbk.plugin.sw.script.enable =<JavaScriptからアプレットのメソッド呼出しを利用する/しない> |
<JavaScriptからアプレットのメソッド呼出しを利用する/しない>には、以下のどちらかを記述してください。
JavaScriptからアプレットのメソッドの呼出し機能を有効にします。
JavaScriptからアプレットのメソッドの呼出し機能を無効にします。
デフォルト状態では、jbk.plugin.sw.script.enableの値はfalse(利用しない)に設定されています。
メソッド呼出し方法
JavaScriptからアプレットのメソッドを呼び出すには次のように行います。
例:アプレットのHello()メソッドをHTMLページ上のbutton1をクリックした時に起動します。
[HTML側]
<OBJECT classid="CLSID:BEA62964-C40B-11D1-AACA-00A0C9216A67" width="160" height="120">
<PARAM NAME="CODE" VALUE="Applet1.class">
<PARAM NAME="TYPE" VALUE="application/x-JBK-Plugin">
<PARAM NAME="ARCHIVE" VALUE="TestApplet.jar">
<PARAM NAME="useDefault" VALUE="true">
</OBJECT>
<INPUT TYPE="button" NAME="button1" VALUE="ボタン" onClick="sample()">
<Script language="JavaScript" FOR="window">
<!---
function sample() { alert( document.applets[0].Hello( "XXXX" ) ); }
//---->
</Script> |
[アプレット側]
import java.applet.*;
public class Applet1 extends Applet{
public void init() { }
//引数の前後に文字列を追加して返します
public String Hello(String name){
String retVal = new String("Hello ");
retVal += name ;retVal += "!!" ;return (retVal);
}
} |
JavaScriptからアプレットのメソッドの引数への型変換
JavaScriptからアプレットのメソッド呼出しを行った場合、アプレットのメソッドの引数には、JavaScriptの値が渡されます。この時JavaScriptの型からJavaの型への型変換が行われます。これらの型変換の仕様を以下に示します。
アプレットのメソッドで宣言したJavaの型 | JavaScriptから渡す値 | |
---|---|---|
JavaScriptの型 | 変換結果 | |
Byte/byte | 文字型 |
|
数値型 |
| |
論理型 |
| |
null値 |
| |
Object |
| |
Character/char | 文字型 |
|
数値型 |
| |
論理型 |
| |
null値 |
| |
Object |
| |
Short/short | 文字型 |
|
数値型 |
| |
論理型 |
| |
null値 |
| |
Object |
| |
Integer/int | 文字型 |
|
数値型 |
| |
論理型 |
| |
null値 |
| |
Object |
| |
Long/long | 文字型 |
|
数値型 |
※long型の範囲の数値文字列を渡しても、int型の範囲外の値は0となります。 | |
論理型 |
| |
null値 |
| |
Object |
| |
Boolean/boolean | 文字型 |
|
数値型 |
| |
論理型 |
| |
null値 |
| |
Object |
| |
Float/float | 文字型 |
|
数値型 |
| |
論理型 |
| |
null値 |
| |
Object |
| |
Double/double | 文字型 |
|
数値型 |
| |
論理型 |
| |
null値 |
| |
Object |
| |
String | 文字型 |
|
数値型 |
| |
論理型 |
| |
null値 |
| |
Object |
| |
JSObject | 文字型 |
|
数値型 |
| |
論理型 |
| |
null値 |
| |
Object |
※JSObject型へ変換されたオブジェクトのメソッドを呼び出すことはできません。 |
アプレットのメソッドの返却値からJavaScriptへの型変換
アプレットのメソッドの返却値がJavaScriptへ渡された場合、Javaの型からJavaScriptの型への型変換が行われます。これらの型変換の仕様を以下に示します。
Javaのメソッド返却値の型 | JavaScriptが受け取る値 |
---|---|
Void | JavaScriptのnull値を受け取ります。 |
Byte/byte | JavaScriptの数値型で受け取ります。 |
Character/char | JavaScriptの数値型で受け取ります。 |
Short/short | JavaScriptの数値型で受け取ります。 |
Integer/int | JavaScriptの数値型で受け取ります。 |
Long/long | Javaがlong型の範囲-2147483648~2147483647は、JavaScriptの数値型で受け取ります。 |
Boolean/boolean | Javaのtrueは、JavaScriptの論理型trueを受け取ります。 |
Float/float | Javaのfloat型は、JavaScriptの数値型で受け取ります。 |
Double/double | Javaのdouble型は、JavaScriptの数値型で受け取ります。 |
String | JavaのString型は、JavaScriptの文字列で受け取ります。 |
JSObject | JavaのJSObject型は、JavaScriptの[Object]で受け取ります。 |
アプレットでの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(); } } } |