2

我有一个 Firefox 扩展,它加载了扩展本身包含的 Java jar。我曾经使用 window.java DOM 对象,所以我可以这样做

var loader = java.net.URLClassLoader.newInstance(urls);
const myClassRef = java.lang.Class.forName("com.me.program", true, loader);
var myJavaObject = myClassRef.newInstance();
//use LiveConnect to directly call stuff on my object now.

file:///在我的扩展程序的 JS 代码中,其中 urls 是一个包含jar 文件的 uri 的数组。

当 Firefox 删除 window.java 时,我开始在标签中嵌入一个小程序以获取对 java 的引用:

<html:embed id ="appletID" type="application/x-java-applet" 
    code="java.applet.Applet"  pluginspage="http://java.com/download/"  MAYSCRIPT="true" width="0" height="0" />

....

var ref = document.getElementById("appletID");
window.java = ref.Packages.java;

这在更新到 7u13 后不再起作用,大概是由于不再支持 embed 标记中的 code 属性。我应该怎么做才能解决这个问题?

我已经尝试直接使用archive=指向我的小程序的属性,但问题是因为我在 Firefox 扩展中,所以一切都变成chrome://了 JRE 仍然无法处理的file://uris,而且似乎不支持 uris(我得到通用权限被拒绝消息)。

4

1 回答 1

0

这是在https://bugzilla.mozilla.org/show_bug.cgi?id=748343的评论 74 和 75 中提出并回答的。

简而言之,最新的 Java 插件不允许code="java.applet.Applet". 而且似乎没有办法让插件访问扩展中的 jar 文件。解决方法是将 jar 文件放在可公开访问的 HTTP 站点;jar 文件只需要包含一些琐碎的小程序,例如public class Applet extends java.applet.Applet { }. 这是从 Firefox bugzilla 注释复制的覆盖 HTML:

<html:div name="appletDiv">
    <html:embed id ="appletID" type="application/x-java-applet" 
        archive="https://mysite.com/applet.jar" code="Applet" 
        pluginspage="http://java.com/download/"  
        MAYSCRIPT="true" width="0" height="0" />     
</html:div>
于 2013-03-14T14:42:29.610 回答