将JS-object从Java发送到JS-function作为参数,用于在JavaFX WebView上显示Google地图

时间:2018-04-29 13:36:33

标签: javascript java google-maps javafx

我有使用WebView的桌面JavaFX应用程序,其中显示了Google Map。 我使用JS来显示地图和设置标记。另外,我需要从数据库中获取坐标并将其设置在地图上。

HTML doc:

<!DOCTYPE html>
<html>
  <head>
    <style>
       #map {
        height: 900px;
        width: 100%;
       }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <script>

      var map;

      function setMarker(uluru) {
        var marker = new google.maps.Marker({
          position: uluru,
          map: map
        });
      }

      function initMap() {
        var uluru = {lat: -25.363, lng: 131.044};
        map = new google.maps.Map(document.getElementById('map'), {
          zoom: 4,
          center: uluru
        });
        setMarker(uluru);
      }

    </script>
    <script async defer
    src="https://maps.googleapis.com/maps/api/js?key=myKey&callback=initMap">
    </script>
  </body>
</html>

和JavaFX控制器:

@FXML
WebView mapView;

public void initialize() {
    loadMap();
}

private void loadMap() {
    WebEngine mapEngine = mapView.getEngine();
    mapEngine.load(getClass().getResource("/html/index.html").toExternalForm());
    addMarker(mapEngine, 55.7453893, 37.8679919);
}

private void addMarker(WebEngine mapEngine, Double lat, Double lng) {

//    mapEngine.getLoadWorker().stateProperty().addListener((obs, oldValue, newValue) -> {
    //    if (newValue == Worker.State.SUCCEEDED){
            String funcName = "setMarker";
            String params = "{lat: " + "'" + lat + "'" + ", lng: " + "'" + lng + "'" + "}";
            JSObject markFunc =  (JSObject) mapEngine.executeScript("this");
            markFunc.call(funcName, params);
    //    }
 //   });
}

我没有例外,但第二个标记没有从Java代码中添加。

0 个答案:

没有答案