当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《JavaApplet无法在MacOS上的Firefox中与javascript通信吗?》经验,为你挑选了0个好方法。

我有一个在浏览器中运行的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());

这会触发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());
     }
}

和javascript代码:

function jsfunc() {
    var myApplet = document.getElementById("applet_id");
    return myApplet.getMyValue() + 5;
}

在某些函数中,exp将为null BECAUSE jsfunc调用applet的getMyValue()方法.如果删除对applet属性的所有调用,那么你很酷.
为了解决我的问题,我决定给出我所需要的applet的所有值作为我的javascript函数的参数,我现在很好.
如果javascript改变了applet的状态,那可能并非总是如此......我很幸运:)

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有