У меня есть интерфейс javascript, реализованный в Java, который вызывается моим кодом javascript, который загружается в webview.
JS Inside webview:
Android.myFunction(function(data){
console.log(data);
});
Java:
public class JavaScriptInterface {
Context context;
WebView webView;
JavaScriptInterface(Context c, WebView w) {
context = c;
webView = w;
}
public void myFunction(String callback) {
//when I log callback, it is "undefined"
String someData = "Yay for data";
String js =
"javascript:(function() { "
+ "var callback = " + callback + ";"
+ "callback('" + someData + "');"
+ "})()";
webView.loadUrl(js);
}
}
Строка, загружаемая webview, заканчивается:
javascript:(function() {var callback = undefined; undefined();})()
У меня есть несколько идей:
а. Создайте обратный вызов в JS как строку.
б. Вызовите обратный вызов toString(), прежде чем передавать его на Android.myFunction();
Мой вопрос в том, что это лучший способ сделать это? Я хотел бы иметь возможность просто передавать объекты на Android, и это волшебство срабатывает. Очевидно, это не так.;) Каков следующий лучший способ сделать это?