无法从Windows上的WebView JavaScript调用JavaFX(VirtualBox) [英] Cannot call JavaFX from WebView JavaScript on Windows (VirtualBox)
本文介绍了无法从Windows上的WebView JavaScript调用JavaFX(VirtualBox)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下代码适用于Linux,但回调在Windows(VirtualBox VM)上不起作用。你能告诉我为什么吗?
The following code works on Linux, but the callback does not work on Windows (VirtualBox VM). Can you please tell me why?
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>
推荐答案
诀窍是将Callback创建为类字段:
The trick was to create the Callback as a class field:
private Callback callback = new Callback ();
然后:
webEngine.load (getClass ().getResource ("WebViewTest.html").toString ());
JSObject window = (JSObject) webView.getEngine ().executeScript ("window");
// BUG // window.setMember ("java", new Callback ());
window.setMember ("java", callback);
也许在Windows上有一些垃圾收集?我不知道......
Maybe there is some abusive garbage collecting on Windows? I don't know...
这篇关于无法从Windows上的WebView JavaScript调用JavaFX(VirtualBox)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文