在Firefox 16中,无法再按照https://bugzilla.mozilla.org/show_bug.cgi?id=748343使用全局实例访问Java。

我建立了一个自定义的selenium-ide.xpi(http://seleniumhq.org/download/),它可以加载Java并通过我的自定义框架运行。为了访问Java,我添加了一个addJava.js文件,该文件包含在selenium-ide-common.xul文件中,该文件使用类似于https://developer.mozilla.org/en-US/docs/Java_in_Firefox_Extensions的名称来调用Java,但这不再起作用。

我已尝试以下方法解决此问题:

将以下内容添加到各种.xul文件中,但是每次尝试以下内容时,我都会得到appletRef为null:

<div name="appletDiv">
    <embed id ="cipherDocsApplet" type="application/x-java-applet;version=1.6" code="java.applet.Applet"  pluginspage="http://java.com/download/"  MAYSCRIPT="true" width="0" height="0" />
</div>

var appletRef = document.getElementById("cipherDocsApplet");
window.java = appletRef.Packages.java;


下面给我java_instance.Packages是未定义的。

var java_instance = window.document.createElementNS("http://www.w3.org/1999/xhtml","applet");
     java_instance.setAttribute("id", "adsfund_java_instance");
     java_instance.setAttribute("code", "java.applet.Applet");
     java_instance.setAttribute("width", "0");
     java_instance.setAttribute("height", "0");
     java_instance.setAttribute("flex", "1");

var div = window.document.createElementNS("http://www.w3.org/1999/xhtml","div");
var elementToAppendTo = window.document.getElementsByTagName("vbox")[0];
elementToAppendTo.appendChild(div);
div.appendChild(java_instance);
var date = new java_instance.Packages.java.util.Date();


最后,我尝试了https://bug748343.bugzilla.mozilla.org/attachment.cgi?id=655062,将app元素添加到我的主xul文件中,并在以后获取它,但这也给了我相同的错误:“ TypetError:app.Packages未定义。”

有谁知道如何解决这一问题?

提前致谢,
詹姆士

最佳答案

您正在用IMHO的辛苦方法来做。使用WebDriver(Selenium2框架的一部分),您可以通过加载自定义Firefox配置文件来动态加载Java .xpi扩展名。

例如:

File file = new File("firebug-1.8.1.xpi");
FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.addExtension(file);
firefoxProfile.setPreference("extensions.firebug.currentVersion", "1.8.1");
WebDriver driver = new FirefoxDriver(firefoxProfile);


您想出的是不典型的,因此我怀疑许多人会回答您的问题。

另外,如果Firefox的更高版本已禁用“ LiveConnect”功能,那么您为什么要尝试通过JavaScript注入来强制不支持的浏览器支持该功能呢?

10-06 13:24
查看更多