我对javascript与applet互访问的尝试
我正在做一个applet,非常简单的一个画图的东东,但是关键的问题
在于我要将客户端用户画的结果传回服务器,于是我做下面的尝试。
1.在页面里添加几个hidden类型的input。
2.在用户提交时,对这几个input赋值(值当然在applet里面)。
我看到过几本书上写过,在javascript或者vbscript中可以通过以下
方式访问applet的public变量或者方法:
document.applets.la1.pno;
//la1为applet name,pno为这个applet类的一个public变量(String型)。
document.applets.la1.getpno();
//getpno()为这个applet类的一个public方法。
前一种得到的是一个"undefined",
后一种如果仅仅做applet的内部操作,没有返回值的话,是正常的,如果有返回值的话,
返回的也是"undefined".于是这条路行不通。
再换一种方法,使用netscape.javascript.*,据说它能够调用javascript.
(注意:这个包不是JDK自带的,需要到windows/java/package/目录下找到一个压缩文件,
文件名每个机子都不固定)
首先使用第一种方式,
import netscape.javascript.*;
...
public void getpno(){
try{
JSObject win=JSObject.getWindow(this);
JSObject doc=(JSObject)win.getMember("document");
JSObject form=(JSObject)doc.getMember("test");
JSObject text=(JSObject)form.getMember("l1");
text.setMember("value","kaka");
}catch(Exception e){
Graphics g=getGraphics();
g.drawString("error",30,50);
g.dispose();
}
}
访问成功(test为form名,l1为input名)
我以为就这么解决了,
于是改为下面的
public void getpno(){
try{
JSObject win=JSObject.getWindow(this);
JSObject doc=(JSObject)win.getMember("document");
JSObject form=(JSObject)doc.getMember("test");
JSObject text=(JSObject)form.getMember("l1");
text.setMember("value",result);
}catch(Exception e){
Graphics g=getGraphics();
g.drawString("error",30,50);
g.dispose();
}
}
result为一String,肯定有值的。
出错。
于是再换第二种方式:
public void getpno(){
try{
JSObject win=JSObject.getWindow(this);
win.eval("setstr(\"kaka\")");
}catch(Exception e){
Graphics g=getGraphics();
g.drawString("error",30,50);
g.dispose();
}
}
其中setstr为一个javascript函数,如下
<script language="javascript">
function setstr(str)
{
document.test.l1.value=str;
}
</script>
又可以了。
但是当我win.eval那句换成
win.eval("setstr(\""+result+"\")");
又是error.
天哪,我晕了。
大虾帮我找找原因。
那个String型的result肯定是没问题的。