[英]passing values to JavaFX from javascript
由於這是我的第一篇文章,請原諒任何不正確之處。 我的問題,我想將JavaScript函數的值傳遞給initialize方法上的Javafx
public void initialize(URL arg0, ResourceBundle arg1) {
// TODO Auto-generated method stub
final URL urlGoogleMaps = getClass().getResource("googlemaps.html");
System.out.println("fjdsoij");
browser.getEngine().load(urlGoogleMaps.toExternalForm());
WebEngine webEngine = browser.getEngine();
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>(){
@Override
public void changed(ObservableValue<? extends State> ov, State oldState, State newState) {
if(newState == State.SUCCEEDED){
JSObject window = (JSObject)webEngine.executeScript("window");
window.setMember("app", new JavaApplication());
}
}
});
}
public class JavaApplication{
public void calljavascript( int lengthInMeters){
System.out.println(lengthInMeters);
}
}
}
和JavaScript部分是這樣的
function initialize() {
var mapOptions = {
zoom: 3,
center: new google.maps.LatLng(0, -180),
mapTypeId: google.maps.MapTypeId.TERRAIN
};
var map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
var flightPlanCoordinates = [
new google.maps.LatLng(37.772323, -122.214897),
new google.maps.LatLng(21.291982, 157.821856)
];
var flightPath = new google.maps.Polyline({
path: flightPlanCoordinates,
//geodesic: true,
strokeColor: '#FF0000',
strokeOpacity: 1.0,
strokeWeight: 2
});
var lengthInMeters = google.maps.geometry.spherical.computeLength(flightPath.getPath());
flightPath.setMap(map);
alert("polyline is "+lengthInMeters+" long");
app.calljavascript(lengthInMeters);
}
google.maps.event.addDomListener(window, 'load', initialize);
我要傳遞的值是方法調用JavaScript上的lengthInMeters有什么想法? 提前thnx
我已經嘗試過簡化代碼:
WebEngine webEngine = browser.getEngine();
webEngine.getLoadWorker().stateProperty().addListener((ov,oldState,newState)->{
if(newState==State.SUCCEEDED){
JSObject window = (JSObject) webEngine.executeScript("window");
window.setMember("app", new JavaApplication());
}
});
webView.getEngine().loadContent("<html>\n"
+ " <script>function initialize() {"
+ " var lengthInMeters = 5; "
+ " app.calljavascript(lengthInMeters);"
+ "} </script> "
+ " <body onLoad=\"initialize()\">Hi!\n"
+ " </body>\n"
+ "</html>");
而且不起作用。
在您的情況下以及在我的方法中,在加載Web 之后會調用setMember()
,因此在load
方法之前會調用initialize()
。 因此, app.calljavascript()
失敗。
解決方法是這樣的:
WebEngine webEngine = browser.getEngine();
JSObject window = (JSObject) webEngine.executeScript("window");
window.setMember("app", new JavaApplication());
browser.getEngine().loadContent("<html>\n"
+ " <script>function initialize() {"
+ " var lengthInMeters = 5; "
+ " app.calljavascript(lengthInMeters);"
+ "} </script> "
+ " <body onLoad=\"initialize()\">Hi!\n"
+ " </body>\n"
+ "</html>");
注意,我們在加載Web內容之前設置了成員。
編輯
我在這里創建了一個更詳細的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.