通过JavaFX中的WebView从javascript获取JSONObject
我正在使用名为传单和传单路由的javscript库来显示地图并计算从起点到终点的路线。到现在为止,一直都还不错。为此,我使用WebView表单JavaFX加载包含所需javascript的html文件。 这是执行此操作所需的javascript:通过JavaFX中的WebView从javascript获取JSONObject,javascript,java,json,javafx,webview,Javascript,Java,Json,Javafx,Webview,我正在使用名为传单和传单路由的javscript库来显示地图并计算从起点到终点的路线。到现在为止,一直都还不错。为此,我使用WebView表单JavaFX加载包含所需javascript的html文件。 这是执行此操作所需的javascript: function initMap() { map = L.map('map'); } function addLayers() { L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{
function initMap()
{
map = L.map('map');
}
function addLayers()
{
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
}
function calculateRoutingExample()
{
control = L.Routing.control({
waypoints: [
L.latLng(currentPosition.latitud, currentPosition.longitud),
L.latLng(destination.latitud, destination.longitud)
],
routeWhileDragging: false,
reverseWaypoints: true,
showAlternatives: true,
altLineOptions: {
styles: [
{color: 'black', opacity: 0.15, weight: 9},
{color: 'white', opacity: 0.8, weight: 6},
{color: 'blue', opacity: 0.5, weight: 2}
]
}
}).addTo(map);
L.Routing.errorControl(control).addTo(map);
//Esconder las indicaciones de texto sobre el mapa
control.hide();
}
在web浏览器javascript调试控制台上使用此方法获得的值:
"{"name":"Carrer del Taulat, Carrer de Venero","coordinates":[{"lat":41.399859,"lng":2.206204},{"lat":41.399594,"lng":2.205881},{"lat":41.399546,"lng":2.205821},{"lat":41.399158,"lng":2.205341},{"lat":41.398923,"lng":2.205051},{"lat":41.398597,"lng":2.204657},{"lat":41.398972,"lng":2.204181},{"lat":41.399085,"lng":2.204137},{"lat":41.399127,"lng":2.20405},{"lat":41.399128,"lng":2.203947},{"lat":41.399351,"lng":2.203647},{"lat":41.399772,"lng":2.203082},{"lat":41.399837,"lng":2.203096},{"lat":41.3999,"lng":2.203073},{"lat":41.399958,"lng":2.203004},{"lat":41.399983,"lng":2.202891},{"lat":41.400024,"lng":2.20277},{"lat":41.400668,"lng":2.201952},{"lat":41.400731,"lng":2.20196},{"lat":41.400825,"lng":2.201939},{"lat":41.401106,"lng":2.202296},{"lat":41.402006,"lng":2.20112},{"lat":41.40175,"lng":2.20079},{"lat":41.401697,"lng":2.200763},{"lat":41.40159,"lng":2.200775},{"lat":41.401529,"lng":2.200777},{"lat":41.401495,"lng":2.200734},{"lat":41.401447,"lng":2.200652},{"lat":41.401086,"lng":2.201118}],"instructions":[{"type":"Straight","distance":191,"time":24,"road":"Carrer del Taulat","direction":"SW","index":0},{"type":"Right","distance":58,"time":11,"road":"Rambla del Poblenou","direction":"NW","index":5},{"type":"Straight","distance":13,"time":2,"road":"","direction":"N","index":6},{"type":"SlightLeft","distance":17,"time":2,"road":"","direction":"NW","index":7},{"type":"Right","distance":102,"time":20,"road":"Rambla del Poblenou","direction":"NW","index":9},{"type":"Straight","distance":33,"time":4,"road":"","direction":"N","index":11},{"type":"SlightRight","distance":110,"time":21,"road":"Rambla del Poblenou","direction":"W","index":15},{"type":"Straight","distance":18,"time":2,"road":"","direction":"N","index":17},{"type":"Straight","distance":43,"time":6,"road":"Carrer de Llull","direction":"NE","index":19},{"type":"Left","distance":140,"time":17,"road":"carrer de Venero","direction":"NW","index":20},{"type":"Straight","distance":40,"time":5,"road":"Carrer de Pujades","direction":"SW","index":21},{"type":"SlightLeft","distance":39,"time":6,"road":"","direction":"S","index":22},{"type":"Left","distance":56,"time":10,"road":"Rambla del Poblenou","direction":"SE","index":27},{"type":"DestinationReached","distance":0,"time":0,"road":"","direction":"N","index":28}],"summary":{"totalDistance":860,"totalTime":129},"inputWaypoints":[{"options":{"allowUTurn":false},"latLng":{"lat":41.4,"lng":2.206},"_initHooksCalled":true},{"options":{"allowUTurn":false},"latLng":{"lat":41.401,"lng":2.201},"_initHooksCalled":true}],"waypoints":[{"options":{"allowUTurn":false},"latLng":{"lat":41.399859,"lng":2.206204},"_initHooksCalled":true},{"options":{"allowUTurn":false},"latLng":{"lat":41.401086,"lng":2.201118},"_initHooksCalled":true}],"waypointIndices":[0,28],"routesIndex":0}"
从Java可以使用以下调用调用javascript函数:
WebEngine engine = webView.getEngine();
String JSONRoute = engine.executeScript("getJSONRoute()");
在javascript方面:
function getJSONRoute()
{
return JSON.stringify(control._routes[0]);
}
理论上,javascript上的函数将向Java返回一个字符串,稍后我将能够使用它。我用“Hi I am the message”这样的示例字符串尝试了这一点,效果很好
但是,当我执行此操作时,会出现以下错误:
Error getting JSON route : TypeError: undefined is not an object (evaluating 'control._routes[0]')
如何在Java应用程序中获取javascript中getJSONRoute()返回的JSON
谢谢大家!
Error getting JSON route : TypeError: undefined is not an object (evaluating 'control._routes[0]')