Je charge ci-dessous html dans ma webView
Maintenant, ce que je veux faire est de remplir la zone de texte dans la variable html
provenant de ma variable de classe Java, puis d'appuyer automatiquement sur submit.
Mais je n'ai aucune idée de comment faire cela.
Toute pensée sera appréciée.
Tout d'abord, votre URL semble non disponible.
Si vous souhaitez effectuer un échange de données entre une application Android et votre application Web/page Web, vous pouvez le faire via javascript.
Voici un exemple du site officiel Android:
Créez une classe comme celle-ci:
public class JavaScriptInterface {
Context mContext;
/** Instantiate the interface and set the context */
JavaScriptInterface(Context c) {
mContext = c;
}
/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
Dans votre WebView
:
WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
Dans votre page web:
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />
<script type="text/javascript">
function showAndroidToast(toast) {
Android.showToast(toast);
}
</script>
Si vous voulez transmettre quelque chose à votre page Web, appelez simplement la fonction javascript correspondante:
String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");
Voici la référence: http://developer.Android.com/guide/webapps/webview.html
J'ajouterais que le chargement de la fonction javascript devrait être effectué lors du chargement du code HTML. Pour contrôler cela, vous pouvez utiliser les éléments suivants:
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("file:///Android_asset/test.html");
webview.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url){
webview.loadUrl("javascript:init('" + theArgumentYouWantToPass + "')");
}
});
test.html
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
hola
adios
</body>
<script type="text/javascript">
function init(val){
// Do whatever you want with your parameter val
}
</script>
</html>
Faites attention pour appeler une fonction javascript de cette manière, la variable str
peut inclure des guillemets simples ou d’autres caractères spéciaux.
String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");
Je suggère d'encoder str
en base64 et de le décoder du côté javascript.
Android
String str = "xxx";
//encode in base64
String base64Str = Base64.encodeToString(str.getBytes(), Base64.NO_WRAP);
myWebView.loadUrl("javascript:xxx('"+ base64Str +"')");
Javascript
function xxx(val) {
//decode from base64
var str = atob(data)
}
Activez simplement DomStorage et écrivez "var x =" dans la chaîne:
webview.getSettings().setJavaScriptEnabled(true);
web.getSettings().setDomStorageEnabled(true);
webview.loadUrl(urlString);
webview.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url){
super.onPageFinished(view, url);
String js = "javascript:var x =document.getElementById('username').value = '"+user+"';var y=document.getElementById('password').value='"+pass+"';";
if (Build.VERSION.SDK_INT >= 19) {
view.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
}
});
} else {
view.loadUrl(js);
}
view.loadUrl(js);
}
});
Passer le paramètre directement dans l'URL
webView.loadUrl("file:///Android_asset/animation.html?message=testing");
Récupère le paramètre dans le fichier html
var url_string = window.location.href
var url = new URL(url_string);
var message= url.searchParams.get("message");