- - PR -
質問:JavaScriptによるAppletのメンバ変数の参照方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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> よろしくお願いいたします。 |
|
投稿日時: 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[] なんて 記述方法もあるのですが、どれが適当なのかは私は詳しくないので なんとも言えません。具体的に対象ブラウザなどで試してみて下さい。 ではでは。 |
|
投稿日時: 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> このような場合は、どうすればよいのでしょうか? お分かりになりましたら、ご教示いただきたく、よろしくお願いいたします。 |
|
投稿日時: 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(","); // 区切り文字を「,」とした場合 } 後は通常通りにいけるのではないでしょうかね。 |
|
投稿日時: 2004-10-16 20:38
takamaro様
どうもありがとうございます。 |
1