将值从JavaScript传递给JavaFX [英] passing values to JavaFX from javascript
问题描述
因为这是我的第一篇文章,请原谅任何不准确的地方。我的问题是,我想将初始化方法中的JavaScript函数的值传递给Javafx。
public void initialize(URL arg0, ResourceBundle arg1){
// TODO自动生成方法存根
最终URL urlGoogleMaps = getClass()。getResource(googlemaps.html);
System.out.println(fjdsoij);
browser.getEngine()。load(urlGoogles.s.ExternalForm());
WebEngine webEngine = browser.getEngine();
webEngine.getLoadWorker()。stateProperty()。addListener(
new ChangeListener< State>(){
@Override
public void changed(ObservableValue< ;? extends状态> ov,状态oldState,状态newState){
if(newState == State.SUCCEEDED){
JSObject window =(JSObject)webEngine.executeScript(window);
窗口。 setMember(app,new JavaApplication());
}
}
});
public class JavaApplication {
public void calljavascript(int lengthInMeters){
System.out.println(lengthInMeters);
}
}
}
和javascript部分是这样的
函数初始化(){
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);
我想传递的值是方法calljavascript上的lengthInMeters任何想法? thnx提前
我已经试过了您的代码的简化版本:
WebEngine webEngine = browser.getEngine();
$ b $ 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> \\\
+< script> function initialize(){
+var lengthInMeters = 5;
+app.calljavascript(lengthInMeters);
+}< / script>
+< body onLoad = \initialize()\>嗨! \\\
+< / body> \\\
+< / html>);
并且不起作用。
你的情况和我的方法, 在 initialize / code>在
load
方法之前在之前调用。因此, app.calljavascript()
失败。
解决方法如下:
WebEngine webEngine = browser.getEngine();
JSObject window =(JSObject)webEngine.executeScript(window);
window.setMember(app,new JavaApplication());
$ b browser.getEngine loadContent(< html> \\\
+< script>函数initialize(){
+var lengthInMeters = 5;
+app.calljavascript(lengthInMeters);
+}< / script>
+< body onLoad = \initialize()\ >嗨!\\\
+< / body> \\\
+< / html>);
请注意,我们在网页内容加载前设置了成员。 编辑 我创建了一个更详细的答案这里。 As this is my first post , forgive any inaccuracies. My problem , i want to pass the value from an javascript function to Javafx on the initialize method } and the javascript part is like this The value i want to pass is the lengthInMeters on the method calljavascript any ideas ? thnx in advance I've tried a simplified version of your code: and it's not working. In your case and in my approach, The solution is this: Notice we set the member before the web content is loaded. EDIT I've created a more elaborated answer here. 这篇关于将值从JavaScript传递给JavaFX的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
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);
}
}
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);
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>");
setMember()
is called after the web has been loaded, so initialize()
is called before by the load
method. Consequently, app.calljavascript()
fails. 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>");