webView
に以下のhtmlを読み込んでいます
ここでやりたいことは、Javaクラス変数から取得したhtml
のテキストボックスを埋めてから、自動的にsubmitを押すことです。
しかし、私はこれを行う方法がわかりません。
どんな考えでも大歓迎です。
まず、URLが利用できないようです。
AndroidアプリとWebアプリ/ Webページの間でデータ交換を行いたい場合は、javascriptを使用してこれを実現できます。
Android公式サイトの例:
次のようなクラスを作成します。
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();
}
}
WebView
で:
WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
Webページで:
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />
<script type="text/javascript">
function showAndroidToast(toast) {
Android.showToast(toast);
}
</script>
Webページに何かを渡したい場合は、対応するjavascript関数を呼び出すだけです。
String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");
リファレンスは次のとおりです。 http://developer.Android.com/guide/webapps/webview.html
Htmlが読み込まれたときにjavascript関数の読み込みを行う必要があることを追加します。これを制御するには、次を使用できます。
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>
ncaught ReferenceError:myFunction is not defined at null:1 Android webviewの例外 から取得
注意このようなjavascript関数を呼び出すには、str
に一重引用符またはその他の特殊文字を含めることができます。
String str = "xxx";
myWebView.loadUrl("javascript:xxx('"+str+"')");
str
をbase64でエンコードし、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)
}
DomStorageを有効にして、「var x =」を文字列に書き込むだけです。
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);
}
});
パラメータをURLに直接渡します
webView.loadUrl("file:///Android_asset/animation.html?message=testing");
html
ファイルのパラメーターを取得します
var url_string = window.location.href
var url = new URL(url_string);
var message= url.searchParams.get("message");