我试图使用JavaFX将Java函数称为JavaScript回调。 首先,我在初始化期间将Java类添加为窗口的成员:
JSObject jsobj = (JSObject) currentWebEngine.executeScript("window");
jsobj.setMember("java", this);
Java请求函数在Platform.runLater()
:
String script = "document.makeRequest('"+inputString+"')";
currentWebEngine.executeScript(script);
在javascript端完成异步请求后,应调用java函数返回结果。但是,我在这方面遇到例外。我甚至尝试在没有参数的情况下调用函数,但仍然不起作用:
window.java.returnResult();
但我得到以下例外:
runnable中的异常 netscape.javascript.JSException:TypeError:'undefined'不是对象
它与异步请求无关,因为我甚至尝试直接在makeRequest()函数中调用它并得到了同样的错误。 知道我在那个区域做错了什么吗? 以前的代码集成在Desktop JFrame应用程序中,而不是applet。
答案 0 :(得分:3)
我设法找到问题的解决方案。以下代码稍早调用,因此该类未在javascript中注册:
JSObject jsobj = (JSObject) currentWebEngine.executeScript("window");
jsobj.setMember("java", this);
我只是在网络引擎的监听器上调用它并且它有效。
答案 1 :(得分:0)
使用DWR,您可以通过JavaScript使用java方法。