JavaScript 回调函数在运行时不持久化参数?
JavaScript callback function does not persist parameter during runtime?
我在 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 回调函数。当用户单击标记时,将调用 JavaScript 中的 Android 接口。这工作正常但不是在创建标记时传输的 locationId,Android.getLocationDetails()
的参数始终为 0。所以我猜 JavaScript 不会保留 locationId。我想那是因为我调试了我的 Android 代码中调用函数 createLocationMarker()
的行,其中 locationId 被定义为正确设置。此外,当我在我的 JavaScript 代码中对 locationId 进行硬编码时,如 Android.getLocationDetails(2);
,locationId 2 将直接发送到 Android 中的 JavascriptInterface。所以一定是JavaScript的问题。
希望有几个JavaScript高手能帮我这样的菜鸟解决问题
您正在覆盖变量(创建另一个具有相同名称的局部变量):
function createLocationMarker(lat, lon, locationId) {
var marker = L.marker([lat, lon]).addTo(map).on('click', function(locationId) {
Android.getLocationDetails(locationId);
});
}
使用不同的名称以访问外部范围上的 locationId
。
我在 Android 应用程序的 WebView 中使用 JavaScript 库 Leaflet 来显示带有标记的地图。这些标记代表我的 Android 应用程序中的位置对象,因此通过调用 JavaScript.
中的函数将位置及其 ID 发送到 JavaScriptview.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 回调函数。当用户单击标记时,将调用 JavaScript 中的 Android 接口。这工作正常但不是在创建标记时传输的 locationId,Android.getLocationDetails()
的参数始终为 0。所以我猜 JavaScript 不会保留 locationId。我想那是因为我调试了我的 Android 代码中调用函数 createLocationMarker()
的行,其中 locationId 被定义为正确设置。此外,当我在我的 JavaScript 代码中对 locationId 进行硬编码时,如 Android.getLocationDetails(2);
,locationId 2 将直接发送到 Android 中的 JavascriptInterface。所以一定是JavaScript的问题。
希望有几个JavaScript高手能帮我这样的菜鸟解决问题
您正在覆盖变量(创建另一个具有相同名称的局部变量):
function createLocationMarker(lat, lon, locationId) { var marker = L.marker([lat, lon]).addTo(map).on('click', function(locationId) { Android.getLocationDetails(locationId); }); }
使用不同的名称以访问外部范围上的 locationId
。