我正在Android应用程序的WebView中使用JavaScript库Leaflet来显示带有标记的地图。这些标记代表我的Android应用程序中的位置对象,因此可以通过调用JavaScript中的函数将位置的位置及其ID发送给JavaScript。
view.loadUrl("javascript:createLocationMarker(" + lat + "," + lon + "," + locationId + ");");
我不知道这是否真的有必要知道,因为我想问题似乎出在JavaScript中:
function createLocationMarker(lat, lon, locationId) {
var marker = L.marker([lat, lon]).addTo(map).on('click', function(locationId) {
Android.getLocationDetails(locationId);
});
}
在应创建标记的位置创建标记。工作良好!
问题是绑定到标记的onClick回调函数。当用户单击标记时,将调用Android中的JavaScriptInterface。这样做很好,但是可以代替创建标记时发送的locationId,参数Android.getLocationDetails()
始终为0。所以我想JavaScript不能持久化locationId。我猜是因为我在Android代码中调试了该行,该行调用了函数createLocationMarker()
,其中locationId的定义是正确的。另外,当我用Android.getLocationDetails(2);
之类的JavaScript代码对locationId进行硬编码时,会将locationId 2直接发送到Android中的JavascriptInterface。因此,JavaScript一定是一个问题。
我希望有一些JavaScript漏洞可以帮助像我这样的菜鸟解决问题。
答案 0 :(得分:1)
您要覆盖变量(创建另一个具有相同名称的局部变量):
function createLocationMarker(lat, lon, locationId) { var marker = L.marker([lat, lon]).addTo(map).on('click', function(locationId) { Android.getLocationDetails(locationId); }); }
使用其他名称访问外部作用域上的locationId
。