【发布时间】:2011-10-24 13:24:19
【问题描述】:
我有一个用 Java 实现的 javascript 接口,由我在 webview 中加载的 javascript 代码调用。
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 中将回调构建为字符串。
b.在将回调传递给 Android.myFunction() 之前调用回调的 toString();
我的问题是,最好的方法是什么?我希望能够将对象传递给 Android,它神奇地工作。显然,情况并非如此。 ;) 下一个最好的方法是什么?
【问题讨论】:
-
将函数创建为字符串听起来像是纯粹的、蒸馏过的邪恶。
-
我完全同意。不幸的是,我很确定这是我在这种情况下的唯一选择。此外,我不确定是否有更好的方法来解决这个问题。我想要回调的灵活性,而不是仅仅写出一个函数 Android 端来处理回调。
-
@missingno 通过字符串操作创建函数有什么问题?我假设 Jonathan 会事先验证字符串,所以这看起来很合理。
标签: java javascript android webview