3

LiveConnect 是一种连接 Java 和 JavaScript 的 Mozilla 技术。令人惊讶的是,他们已经开始为最新版本的 Firefox 重新维护它。在 Firefox 中,我可以编写例如

var d = new java.util.Date();

或者Packages.如果它不是 java.something 则使用命名空间

var d = new Packages.java.util.Date();

或者我可能会发疯并在摇摆中调用工厂方法

Packages.javax.swing.Box.createVerticalBox();

轻松实例化任何 Java 对象。是否有适用于 ie 的等价物?

4

6 回答 6

5

您可以在 Internet Explorer 中执行的操作是将小程序加载到页面中,该页面公开了执行您想要执行的操作的方法。您获得对小程序的引用,然后在该引用上调用方法。

<applet id="myAppletId" name="myAppletName" ...>

var applet = document.getElementById('myAppletId');
var d = applet.getDateFromApplet();

在您的小程序中,您需要一个getDateFromApplet()返回java.util.Date.

请注意,我所展示的内容应该可以工作,但是我这样做已经有好几年了(当时它在 NS4、6 和 IE 4+ 中工作)。不过我没用过getElementById(),我用过var applet = document.myAppletName;

另一个复杂的情况是,如果您希望它在页面加载时执行,小程序几乎肯定不会准备好,这需要类似以下的代码:

function checkApplets() {
    var da = document.applets; // document.getElementsByName('applet');?

    if (da.length > 0) {
        for (var ii = da.length; ii-- > 0;) {
            if (!da[ii].isActive()) {
                window.timerId = setTimeout(checkApplets, 250);
                return;
            }
        }

        if (window.timerId) {
            clearTimeout(window.timerId);
        }
    }

    window.appletsLoaded = true;
}

最后,它可能(应该)可以使用<object>标签来做到这一点,但正如我所说,我需要从客户端 JavaScript 以这种方式与 Java 小程序交互已经有好几年了,所以我还没有测试它.

于 2009-08-18T19:24:53.753 回答
4

您正在使用 LiveConnect,它是 Mozilla 特定的 JavaScript/Java 桥接器。其他浏览器不支持。

于 2009-08-18T19:24:09.903 回答
2

您可以通过来自 JAVA 中的 servlet 的 JSON 响应来提供对象的属性吗?由于 JS 可以很容易地使用 JSON 并且它是轻量级的,因此可以轻松地从 Java 对象中创建 JS 对象。

还可以查看 Rhino JavaScript 引擎并让 Java 资源从 JavaScript 中可用。 https://developer.mozilla.org/en-US/docs/Rhino_documentation

于 2012-10-01T15:21:42.607 回答
1

据我所知,我认为这是不可能的——Java 和 Javascript 完全不同。JS API 恰好包含一个 Date 对象,Java API 也是如此。

编辑: Java Scripting API ( http://java.sun.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html#jsengine ) 似乎是你能得到的最接近的东西试图做。

于 2009-08-18T19:15:40.170 回答
1

从 Java 1.6 更新 10 开始,Inter-Language LiveConnect Bridge将 Packages 对象附加到页面内的小程序,就像 Firefox 中可用的 Packages 对象一样。所以在一个至少有一个小程序的页面中,即使在 Internet Explorer 中,

new document.applets[0].Packages.java.util.Date().toString();

返回当前日期。还可以注册新的转换器,以便方便地访问在 Java 虚拟机中运行的非 Java 语言。当然,JavaFX 实现了这样的桥梁。

在从 JavaScript 调用它之前不必等待小程序加载,但这可能是一个好主意。Java 插件将使 JavaScript 等待,直到小程序完成加载或出现错误。只要调用了 Applet.init(),小程序就可以在网页中调用JavaScript

于 2009-08-19T04:05:59.820 回答
0

您可能会使用 DWR 或其他一些反向 ajax 库,它们允许您通过 Javascript 对象在服务器端创建 Java 对象。

于 2009-08-18T19:26:48.477 回答