Séb*_*mer 12 javascript java macos firefox applet
我有一个在浏览器中运行的java applet,它调用一些javascript函数并期望从这些函数中得到结果.这适用于以下配置:
但它不适用于MAC OS上的Firefox
问题的根源似乎是始终返回null的win.eval调用.我在Mac OS X 10.4.11上使用Firefox 3.0.6进行了测试
一点代码:
JSObject win = (JSObject) JSObject.getWindow(this);
Object exp = win.eval("testfunc()");
System.out.println("exp = " + exp.toString());
Run Code Online (Sandbox Code Playgroud)
这会触发java.lang.NullPointerException(exp.toString())语句.testfunc javascript函数只返回true.
我尝试使用win.call并得到了相同的结果.
我的applet标记包含mayscript和scriptable属性.
我找到答案感谢特里斯坦.测试他的解决方案我创建了一个非常简单的测试,可以工作并以我的方式找到罪魁祸首.我确信我用一个空的testfunc()做了我的测试,它刚刚返回true,但我可能没有,因为在那种情况下它会起作用.这里真正的问题是该函数称为applet的公共方法.Liveconnect似乎无法在Firefox Mac中处理这种情况.
让我给你举个例子 :
Java类:
public class MyApplet extends Applet {
public int getMyValue() {
return 5;
}
public void somefunction() {
JSObject win = (JSObject) JSObject.getWindow(this);
Object exp = win.eval("jsfunc()");
System.out.println("exp = " + exp.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
和javascript代码:
function jsfunc() {
var myApplet = document.getElementById("applet_id");
return myApplet.getMyValue() + 5;
}
Run Code Online (Sandbox Code Playgroud)
在某些函数中,exp将为null BECAUSE jsfunc调用applet的getMyValue()方法.如果删除对applet属性的所有调用,那么你很酷.
为了解决我的问题,我决定给出我所需要的applet的所有值作为我的javascript函数的参数,我现在很好.
如果javascript改变了applet的状态,那可能并非总是如此......我很幸运:)
它可以通过访问屏幕上的全局对象之一来工作吗?因此,
在 JavaScript 中:
window.testfunc = function() { //... }
Run Code Online (Sandbox Code Playgroud)
在小程序中:
win.eval("window.testfunc()") // or maybe just win.eval("testfunc()")
Run Code Online (Sandbox Code Playgroud)
那将是我的实验。但我一直在 Mac OS X 上的 FF 上调用“window.close()”,并且仍然有效。
| 归档时间: |
|
| 查看次数: |
9970 次 |
| 最近记录: |