JavaScript回调函数在运行时不会保留参数吗?

时间:2018-08-16 17:44:13

标签: javascript callback leaflet android-webview

我正在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漏洞可以帮助像我这样的菜鸟解决问题。

1 个答案:

答案 0 :(得分:1)

您要覆盖变量(创建另一个具有相同名称的局部变量):

function createLocationMarker(lat, lon, locationId) {
    var marker = L.marker([lat, lon]).addTo(map).on('click', function(locationId) {
        Android.getLocationDetails(locationId);
    });
}

使用其他名称访问外部作用域上的locationId