Sun*_*van 5 html javascript webview javafx-2
我正在使用JavaFX 2.2,我正在使用webview将html代码集成到JavaFX场景中,并且能够正确加载html.我正在关注此链接并尝试将一些对象从javascript传递到webview/controller但我在java端获取空值.
我在JSObject中保存了一个接口对象,如下所示
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> ov,
State oldState, State newState) {
if (newState == State.SUCCEEDED) {
JSObject win = (JSObject) webEngine.executeScript("window");
win.setMember("app", new JavaApp());
}
}
}
);
Run Code Online (Sandbox Code Playgroud)
我创建了一个类
public class JavaApp {
public void exit() {
Platform.exit();
}
public void print(Date date) {
System.out.println("Parm:"+date);
}
public Date getValue() {
return new Date();
}
}
Run Code Online (Sandbox Code Playgroud)
我的HTML是
<html lang="en">
<head>
<script type="text/javascript">
function callJava(){
app.print(new Date());
var val = app.getValue();
app.print(val);
}
</script>
</head>
<body>
<p>Help</p>
<p><a href="about:blank" onclick="callJava();">Exit the Application</a></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我总是在JavaApp.print()方法中打印出null值.有趣的是,当我在print方法中将参数从Date更改为String并从javascript传递字符串时,我得到了正确的值.
在这种情况下我如何传输对象尤其是Date对象.任何帮助都很受欢迎
Java不知道javascript的Date类.
你可以将一个javascript对象传递给Java,(你必须把它包装在一个JSObject),但是你可以直接获得这样的参数:
我的解决方案:
public class JavaApp {
public void exit() {
Platform.exit();
}
//public void print(Date date) {
// System.out.println("Parm:"+date);
// }
public void print(long date) {
System.out.println("Parm:"+new Date(date));
}
public Date getValue() {
return new Date();
}
}
<html lang="en">
<head>
<script type="text/javascript">
function callJava(){
// app.print(new Date());
app.print(new Date().getTime());
var val = app.getValue();
app.print(val);
}
</script>
</head>
<body>
<p>Help</p>
<p><a href="about:blank" onclick="callJava();">Exit the Application</a></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)