【问题标题】:Kill Java Applet via Javascript通过 Javascript 杀死 Java 小程序
【发布时间】:2010-11-19 00:24:36
【问题描述】:

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

这就是麻烦的开始。这一切都适用于 IE 和 Safari,但不适用于 Firefox 3.5(不过 3.0 可以完美运行)。 Firebug 告诉我缺少 expando 属性。

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

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

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

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

【问题讨论】:

  • 如果你破坏了小程序周围的 DIV 会发生什么? (不隐藏它,用 removeElement 销毁它并删除
  • 我试过了,但无济于事。我的理论:我想通过隐藏父 div,浏览器本身也负责隐藏子项,而不是 Javascript。但是,在删除父 div 时,删除子小程序也是 Javascript 的工作,从而导致出现 expando 错误。我一直在查看 jQuery Bug Tracker,该特定 Bug 列在 1.3.3 版本的路线图上。由于我等不及它自己修复(由 jQuery 开发团队修复),我必须找到解决方法。

标签: java javascript jquery web-applications


【解决方案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 错误。

【讨论】:

  • 是的,这个解决了问题(生成一个新的,但我可以处理那个)。
  • 它产生了什么新问题,只是好奇。
  • 如果您在 javascript 调用完成后终止小程序,它可能会避免该错误。你可以用 java.util.Timer.schedule() 来做到这一点。
  • 为什么不在 Applet 的 stop() 方法中使用 nuilt 呢?
【解决方案2】:

我建议您创建一个类来监视要杀死的小程序。将监视器作为某种 servlet 运行,并在需要杀死它时让 javascript 发布“kill applet”命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多