无法从Windows上的WebView JavaScript调用JavaFX(VirtualBox) [英] Cannot call JavaFX from WebView JavaScript on Windows (VirtualBox)

查看:255
本文介绍了无法从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆