【发布时间】:2017-01-08 20:24:17
【问题描述】:
以下代码适用于 Linux,但回调不适用于 Windows(VirtualBox VM)。你能告诉我为什么吗?
Java:
public class WebViewTest extends Application {
private Label label = new Label ("...");
public static void main (String[] args) {
launch (args);
}
@Override
public void start (Stage stage) throws Exception {
WebView webView = new WebView ();
WebEngine webEngine = webView.getEngine ();
webEngine.setJavaScriptEnabled (true);
JSObject window = (JSObject) webView.getEngine ().executeScript ("window");
window.setMember ("java", new Callback ());
webEngine.load (getClass ().getResource ("WebViewTest.html").toString ());
BorderPane pane = new BorderPane ();
pane.setCenter (webView);
pane.setBottom (label);
Scene scene = new Scene (pane);
stage.setScene (scene);
stage.show ();
}
public class Callback {
public void click () {
label.setText ("Clicked :-)");
}
}
}
HTML:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta charset="UTF-8">
</head>
<body>
<button onclick="window.java.click ();">Test</button>
</body>
</html>
【问题讨论】:
-
你检查过Firebug会发生什么吗?
-
我不知道如何在 JavaFX WebView 中使用 Firebug。但是,经过一些调试,
window.java在 Windows 上的值为undefined。 -
我评论中的链接将告诉您如何将 Firebug 与 JavaFX webview 一起使用。
-
好的,谢谢,但是简单的手动调试已经告诉我
java回调没有定义,这就是我卡住的地方。就像没有调用window.setMember一样。 -
尝试先加载 HTML,然后附加 Java 桥。毕竟 JavaScript 只能在存在的 DOM 上执行。
标签: javascript java javafx webview