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中是否有等效项?

最佳答案

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

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

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

在您的小程序中,您需要一个返回getDateFromApplet()的公共(public)方法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小程序进行交互已经有好多年了,所以我没有进行测试它。

10-04 22:04
查看更多