У меня есть родное приложение, в котором есть WebView.
Я добавляю класс в WebView, чтобы иметь возможность вызывать его из JavaScript следующим образом:
webView.addJavascriptInterface(new JavascriptInterface(webView, handler), "Android.JSI");
Затем я вызываю класс JavaScriptInterface из JavaScript. Мой 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);
}
Затем я перезваниваю в JavaScript так:
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 не определен.
Есть какие-нибудь идеи о правильном способе сделать это, поскольку я чувствую, что я теряюсь, идя неправильным путем?