我有一个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.
在我的扩展程序的JS代码中,其中url是一个包含jar文件的file:///
uri的数组。
当Firefox删除window.java时,我开始在标记中嵌入applet以获取对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属性。我该怎么做才能解决这个问题?
我已经尝试直接使用指向我的applet的archive=
属性,但问题是因为我在Firefox扩展中所有内容都变为chrome://
uris,而JRE仍然无法处理,似乎不支持file://
uris(我收到一条通用权限被拒绝的消息)。
答案 0 :(得分: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>