Java Applet无法在Mac OS上的Firefox中与javascript通信吗?

Séb*_*mer 12 javascript java macos firefox applet

我有一个在浏览器中运行的java applet,它调用一些javascript函数并期望从这些函数中得到结果.这适用于以下配置:

  • IE浏览器
  • FireFox/Windows
  • Safari/Mac

但它不适用于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的状态,那可能并非总是如此......我很幸运:)

Tri*_*cek 3

它可以通过访问屏幕上的全局对象之一来工作吗?因此,

在 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()”,并且仍然有效。