2009-08-12 83 views
2

我正在为一家开发中的公司工作,并且正在对Web应用程序进行重大设计,每次点击后重新加载所有内容以广泛使用Javascript,因此它实际上就像一个真正的Web应用程序。其中一个特点是使用基于Web的Painter(想到Web上的MSPaint),我将其嵌入到按需页面中。在图像上传完成后,Web应用程序将卸载小程序并继续显示文件上传到的目录。通过Javascript杀死Java Applet

这是麻烦开始的地方。这一切都适用于IE和Safari,但不适用于Firefox 3.5(尽管3.0完美)。 Firebug告诉我expando属性丢失了。

我以前正在处理的Web应用Tiparlo有一个类似的问题(实际上,通过jQuery在applet上完成的任何操作都有问题),但通过包装div来控制(隐藏和显示) div而不是applet。这不幸的是不适用于这个Web应用程序,因为Applet必须被销毁,而不仅仅是隐藏和显示,因为它占用了太多的资源以便在整个不需要的时间运行。

简而言之:是否有可能使Applet通过Javascript破坏自己?另外:是否有解决jQuery/expando/applet问题?我知道小程序在HTML 4.01严格中已被弃用,但将其更改为对象现在不是一个选项。

编辑:我已经添加了Firefox + Firebug的图片,向您显示实际的错误消息。发布代码没有上帝,因为它在其他所有浏览器上都是完美无瑕的,并且是Firefox 3.5特有的问题。 Here be pictures

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

+4

如果您销毁环绕小程序的DIV,会发生什么情况? (不隐藏它,用removeElement和删除它 – 2009-08-12 16:00:26

+1

我试过了,但无济于事。我的理论:我想通过隐藏父div,浏览器本身也照顾隐藏孩子,而不是Javascript。删除父div,这也是Javascript的工作,删除子applet,从而导致expando Bug出现 我一直在寻找jQuery Bug Tracker,并且该1.3.3版本的路线图中列出了该特定的Bug。由于我不能等待它自己修复(由jQuery开发团队修复),我必须找到一个解决方法。 – Mike 2009-08-13 06:28:48

回答

1

您可以随时在一个iframe中加载小程序,只需从加载小程序的页面导航即可。这会杀死它。

你的,如果你要拨打的从JavaScript破坏将是把这样的事情在其他选项。

<script> 
    document.MyApplet.killApplet(); 
</script> 

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

这不是一个很好的方式杀死一个小应用程序,但是,新的浏览器不投一个JS错误,对像IE6这样的老版本,它会抛出一个js错误。

+0

是的,这个解决了这个问题(生成一个新的,但我可以处理那个)。 – Mike 2009-08-14 07:54:24

+0

什么是它创建的新问题,只是好奇 – Keibosh 2009-08-17 15:17:54

+0

如果在JavaScript调用完成后终止applet,它可能会避免出现错误,您可以使用java.util.Tim er.schedule()。 – 2013-06-03 16:36:50

0

我建议你创建一个监视被杀死的applet的类。将监视器作为某种servlet运行,并在需要终止的时候让javascript发布'kill applet'命令。