通过Javascript杀死Java Applet

我正在为一家正在开发的公司工作,并且正在对Web应用程序进行重大的重新设计,每次点击后都会重新加载所有内容,以便大量使用Javascript,因此它实际上就像一个真正的Web应用程序。 其中一个function是使用基于Web的Painter(在Web上考虑MSPaint),我将其嵌入到按需页面中。 在绘制和上载图像之后,Web应用程序然后卸载applet并继续显示文件上载到的目录。

这是麻烦开始的地方。 这一切都适用于IE和Safari,但不适用于Firefox 3.5(虽然3.0可以很好地工作)。 Firebug告诉我,expando属性丢失了。

之前我正在研究的Web应用程序Tiparlo有一个类似的问题(事实上,通过jQuery对applet进行的任何操作都是错误的)但通过包装div并控制(隐藏和显示)div来解决这个问题而不是小程序。 遗憾的是,这不适用于此Web应用程序,因为Applet必须被销毁而不仅仅是隐藏和显示,因为它占用了太多资源,无法在不需要的时间运行。

简而言之:是否有可能通过Javascript使Applet自行销毁? 或者:是否有关于jQuery / expando / applet问题的解决方法? 我知道applet在HTML 4.01严格中已被弃用,但现在不能将它更改为object。

编辑:我添加了Firefox + Firebug的图片,以显示实际的错误消息。 发布代码没有上帝,因为它在所有其他浏览器上运行完美,并且是Firefox 3.5特定的问题。 这是照片

注意:您可以忽略来自button.js的JS Bug。

您始终可以在iframe中加载applet,然后离开加载applet的页面。 这将杀死它。

如果你想从javascript调用destroy,你的另一个选择就是把这样的东西放进去。

 public void killApplet() { AccessController.doPrivileged(new PrivilegedAction() { public Void run() { // kill the JVM System.exit(0); return null; } }); } 

这不是杀死applet的好方法,但是在新的浏览器上它不会抛出JS错误,对于像IE6这样的老版本,它会抛出一个js错误。

我建议你创建一个监视要杀死的applet的类。 将监视器作为某种servlet运行并获取javascript以在需要被杀死时发布’kill applet’命令。