我有使用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代码中添加。