Je veux obtenir une valeur de retour de Javascript dans Android. Je peux le faire avec l'iPhone, mais je ne peux pas avec Android. J'ai utilisé loadUrl, mais il est retourné vide au lieu d'un objet. Quelqu'un peut m'aider ?
Réponses
Trop de publicités?Identique Keith
mais réponse plus courte
webView.addJavascriptInterface(this, "android");
webView.loadUrl("javascript:android.onData(functionThatReturnsSomething)");
Et implémentez la fonction
@JavascriptInterface
public void onData(String value) {
//.. do something with the data
}
N'oubliez pas de supprimer le onData
de la liste proguard
(si vous avez activé proguard)
Voici un hack sur la façon dont vous pouvez l'accomplir :
Ajouter ce client à votre WebView :
final class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d("LogTag", message);
result.confirm();
return true;
}
}
Maintenant, dans votre appel javascript, faites :
webView.loadUrl("javascript:alert(functionThatReturnsSomething)");
Maintenant, dans l'appel onJsAlert "message" contiendra la valeur retournée.
Sur l'API 19+, la meilleure façon de le faire est d'appeler assessJavascript sur votre WebView :
webView.evaluateJavascript("foo.bar()", new ValueCallback<String>() {
@Override public void onReceiveValue(String value) {
// value is the result returned by the Javascript as JSON
}
});
Réponse connexe avec plus de détails : https://stackoverflow.com/a/20377857