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的等价物?
答案 0 :(得分:5)
您可以在Internet Explorer中执行的操作是将applet加载到页面中,该页面公开了执行您要执行的操作的方法。您将获得对applet的引用,然后调用该引用上的方法。
<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;
。
另一个复杂因素是如果你想在页面加载时执行它,那么applet几乎肯定不会准备就绪,这需要代码如下:
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 applet交互以来已经有好几年了,所以我没有测试过。
答案 1 :(得分:4)
您正在使用LiveConnect,这是一个特定于Mozilla的JavaScript / Java桥接器。其他浏览器不支持它。
答案 2 :(得分:2)
您可以通过JAVA中的servlet的JSON响应使对象的属性可用吗?由于JS可以很容易地使用JSON并且它很轻,因此可以轻松地从Java对象中创建JS对象。
另请参阅Rhino JavaScript引擎并使用JavaScript提供Java资源。 https://developer.mozilla.org/en-US/docs/Rhino_documentation
答案 3 :(得分: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)似乎是您可以达到的最接近的目标。
答案 4 :(得分:1)
从Java 1.6更新10开始,Inter-Language LiveConnect Bridge将一个Packages对象附加到页面内的applet,就像Firefox中可用的Packages对象一样。因此,在包含至少一个applet的页面中,即使在Internet Explorer中也是如此,
new document.applets[0].Packages.java.util.Date().toString();
返回当前日期。还可以注册新的转换器,以方便访问在Java虚拟机中运行的非Java语言。当然JavaFX实现了这样的桥梁。
在从JavaScript调用它之前,不应该等待applet加载,但这可能是一个好主意。 Java插件将使JavaScript等待,直到applet完成加载或出现错误。只要调用Applet.init(),applet就可以 调用网页中的JavaScript。
答案 5 :(得分:0)
您可以使用DWR或其他一些反向ajax库,它们允许您通过Javascript对象在服务器端创建Java对象。