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小程序进行交互已经有好多年了,所以我没有进行测试它。