我有一个本地应用程序,在其中包含了一个WebView控件。 我添加了一个类到WebView中,以便能够从JavaScript中进行调用,如下所示:
webView.addJavascriptInterface(new JavascriptInterface(webView, handler), "Android.JSI");
我随后从JavaScript调用JavaScriptInterface类。我的HTML/JavaScript代码如下:
<input type="button" value="Sleep Alert" onclick="sleepAlert(sleepAlertCallbackSuccess, sleepAlertCallbackFail, 'Hi Sleep Alert');" />
function sleepAlert(callBackSuccess, callBackFailure, message)
{
window.Android.JSI.sleepAlert(callBackSuccess.name, callBackFailure.name, message);
}
function sleepAlertCallbackSuccess(message)
{
alert("success: " + message);
}
function sleepAlertCallbackFail(message)
{
alert("fail: " + message);
}
I then callback into the JavaScript like so:
js = "javascript:" + callbackSuccess + "('" + message + "')";
webView.loadUrl(js);
这个方案可行,但如果用户想传递匿名函数而不是普通的命名函数,我就有些困惑了。例如:
<input type="button" value="Anonymous call back" onclick="sleepAlert(function(message) { alert(message); }, sleepAlertCallbackFail, 'anonymous sleep alert');" />
当我将其传递给我的Java类时
public void sleepAlert(final String callbackSuccess, String callbackFail, final String message)
它说callbackSuccess未定义。
有什么正确的方法可以做到这一点,因为我感觉自己正在走错的路?