如何在JavaFX中将数据从WebView传递到控制器,反之亦然

use*_*048 7 javascript java google-maps javafx webview

所以我找到了关于如何在桌面JavaFX应用程序中使用google maps API的教程.

关键是我无法弄清楚如何将数据从WebView(javascripts变量,jsons ..)传递给控制器​​和反之亦然.

我想在textinput上创建一个文本字段来自动搜索该地址并在那里添加一个标记(当我移动标记以填充输入时,反之亦然).javascript独立对我来说没有问题,但我不知道如何从JavaFX控制器调用javascript函数或如何从javascript(经度,纬度等)发回变量

jew*_*sea 8

请参阅JavaFX WebView教程部分:

  • 处理JavaScript命令
  • 制作从JavaScript到JavaFX的Upcall

确保在执行此操作时使用JavaFX 2.1+,因为JavaFX 2.0不完全支持从javaScript到JavaFX的upcalls.


如何从JavaFX控制器调用javascript函数?

加载文档后要执行的Java代码:

webView.getEngine().executeScript("<write your javascript here>");
Run Code Online (Sandbox Code Playgroud)

如何从javascript(经度,纬度等)发回变量?

这是一个通用的通信示例,将其替换为您要执行的实际Java和JavaScript逻辑.

Java代码:

// Add a Java callback object to a WebEngine document once it has loaded.
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());
      }
    }
  });
}
...
// JavaScript interface object
private class JavaApp {
  public void exit() {
    Platform.exit();
  }
}
Run Code Online (Sandbox Code Playgroud)

JavaScript代码(在这种情况下嵌入在html href的onclick处理程序中):

<a href="about:blank" onclick="app.exit()">Exit the Application</a>
Run Code Online (Sandbox Code Playgroud)