- PR -

質問:JavaScriptによるAppletのメンバ変数の参照方法

1
投稿者投稿内容
ノービス40
会議室デビュー日: 2004/10/11
投稿数: 3
投稿日時: 2004-10-11 23:06
40の手習いでWebプログラミングの勉強を始めたノービス40と申します。
初めて書き込みいたします。
件名のようなことをしたいのですが、どなたかご教示頂けませんでしょうか?

現在、検討しているのは次のようなコードです。
関数の定義やアプレットの動作を変更してみたところ、JavaScriptからAppletの関数はコールできるみたいですし、戻り値の型も認識しているみたいです。しかしながらどうしても戻り値が取得できず、inputエレメント(ボタン)の文字が変化が正しく変化しません。

【Javaコード testApp.java import文省略】
public class testApp extends Applet {
private String mojiretu;
public void init() {
mojiretu="ABC";
}
public String getMojiretu() {
return(mojiretu);
}
}
【HTML test.html】
<html>
<head>
<title> test </title>
<applet code="testApp.class" name="aplt" width="0" height="0"> </applet>
<script>
function b_click() {
document.btn.value = document.aplt.getMojiretu();
}
</script>
</head>
<body bgcolor="#dcdcdc">
<input type="button" name="btn" value="XXX" onclick="b_click()">
</input>
</body>
</html>

よろしくお願いいたします。
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-10-12 23:36
はじめまして。わたしも初書きこみになります。
で、問題はJavaというよりJavaScriptの記述にあるのではないでしょうか?

> <script>
> function b_click() {
> document.btn.value = document.aplt.getMojiretu();
> }
> </script>

オブジェクトを指定するなら

btn.value = aplt.getMojiretu();

とするか、document部から記述するなら

document.all.btn.value = document.all.aplt.getMOjiretu();

とかで宣言すれば宜しいのではないかと思います。
他にも、document.all.item() や、document.appletts[] なんて
記述方法もあるのですが、どれが適当なのかは私は詳しくないので
なんとも言えません。具体的に対象ブラウザなどで試してみて下さい。
ではでは。
ノービス40
会議室デビュー日: 2004/10/11
投稿数: 3
投稿日時: 2004-10-14 23:35
takamaro様

どうもありがとうございます。返事が遅れ申し訳ありません。
確かにご指摘のとおり、JavaScript側の問題でした。
次のような<body>に対して、以下の結果となりました。
<body bgcolor="#dcdcdc">
<applet code="testApp.class" id="aplt1" name="aplt" width="0" height="0"> </applet>
<input type="button" id="btn1" name="btn" value="XXX" onclick="b_click()">
</input>
</body>

<script>elementのイベントハンドの中身は、
次の表現はIE,MozillaともOK
var aplt1=window.document.getElementById("aplt1");
var btn1 =window.document.getElementById("btn1");
btn1.value = aplt1.getMojiretu();

次はMozillaではOKでしたが、IEではNGのコード
aplt1=document.getElementById("aplt1");
btn1 =document.getElementById("btn1");
btn1.value = aplt1.getMojiretu();

次はIEでOK、MozillaでNGのコードでした。
btn.value = aplt.getMojiretu();

いろいろと作法もあるようで、難しいものですね。

ところで、配列を返すようにしたAppletを使うバージョンの場合、次のコードはMozillaでは正しく動作するのに、IEではエラーとなってしまいます。
<script>
var xxx=new Array(10);
function b_click() {
var aplt1=window.document.getElementById("aplt1");
var btn1 =window.document.getElementById("btn1");
xxx= aplt1.getArray();//int[10] に値を入れた配列を戻すアプレット
btn1.value = xxx[4];
}
</script>
このような場合は、どうすればよいのでしょうか?

お分かりになりましたら、ご教示いただきたく、よろしくお願いいたします。
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-10-15 09:04
>いろいろと作法もあるようで、難しいものですね。

私のようなJavaScript素人からすれば「ストレス」の元以外の何者でも
ないですね(笑)ついつい避けて通りたくなります。

>ところで、配列を返すようにしたAppletを使うバージョンの場合、次のコードは
>Mozillaでは正しく動作するのに、IEではエラーとなってしまいます。

なんか遠い昔に「Applet->JavaScript間の配列渡しには問題あり」といったような
事を聞いた記憶があります。
で、その対処法は「配列を文字列として連結して送る」だったと思います。
要するに区切り文字を決め、区切り文字を挟んで1つの文字列としてJavaScript側に
渡し、受けたJavaScript側で分解して取り出す。って感じではなかったかと(曖昧

今回でしたら。。

var xxx;
function b_click() {
var aplt1=window.document.getElementById("aplt1");
var btn1 =window.document.getElementById("btn1");
var str = aplt1.getArray();
xxx = str.split(","); // 区切り文字を「,」とした場合
}

後は通常通りにいけるのではないでしょうかね。
ノービス40
会議室デビュー日: 2004/10/11
投稿数: 3
投稿日時: 2004-10-16 20:38
takamaro様

どうもありがとうございます。

1

スキルアップ/キャリアアップ(JOB@IT)