私はこの質問がインターネット上に浮かんでいるのを見てきましたが、実用的な解決策をまだ見つけていません。基本的に、私は自分のアプリをロードしてボタンを押したいです。ボタンアクションは、Webビューに既にロードされているWebサイトにユーザー名とパスワードを入力します(またはonPageFinishedを待ちます)。最後に、ログインページの送信ボタンがアクティブになります。
私が理解していることから、これはJavaインジェクションを実行することによって行うことができますが、Javaコマンドがどうなるかわかりません iOS についても同じ質問が出されましたが、コマンドは少し異なります。
私がwebivewでjavascriptを使用して求めていることを実行することは可能ですか、または this または this のようなwebviewなしでhttp-postを実行する必要がありますか?
あなたが与えることができるあらゆる助けを本当にありがとう!
「Javaコマンド」を使用する必要はありませんが、代わりにJavaScriptなどを使用してください。
String username = "cristian";
webview.loadUrl("javascript:document.getElementById('username').value = '"+username+"';");
基本的に、これらのフィールドを取得して値を設定するJavaScriptコードの大きな文字列を作成する必要があります。また、JavaScriptから送信ボタンを有効/無効にすることもできます。
あなたの答えをありがとう、それは私を助けましたが、うまくいきませんでした。
私がこれを見つけるまで、それは常に白いページを開いていました:
https://stackoverflow.com/a/25606090/3204928
ここに完全なソリューションがあり、あちこちで見つかったすべての情報を混合します:
1)まず、DOMストレージを有効にする必要があります。そうしないと、.GetElementByXXXは何も返しません(これを行う必要がありますbeforeページの読み込み)
myWebView.getSettings().setDomStorageEnabled(true);
2)GetElementByXXXでの最後のJavaScript呼び出し[〜#〜] must [〜#〜]結果を変数に保存する
例1:
_webview.loadUrl("javascript:var uselessvar =document.getElementById('passwordfield').value='"+password+"';");
ここでは1回の呼び出し(1つのセミコロンのみ)なので、すぐに結果を 'uselessvar'に格納します
例2:user802467の回答を参照
ここには3つの呼び出し(1つはログインフィールド、1つはパスワードフィールド、1つは送信ボタン)があり、最後の呼び出しのみを保存する必要があります。これは「frms」で行われます。
Javascriptプログラマーは、この動作を簡単に説明する必要があります...
これが役に立てば幸い
これは私がフォームの値を入力してフォームを送信するのに役立ちました:
webView.loadUrl("javascript: {" +
"document.getElementById('username').value = '"+uname +"';" +
"document.getElementById('password').value = '"+password+"';" +
"var frms = document.getElementsByName('loginForm');" +
"frms[0].submit(); };");
ここに私のために働く完全なコードがあります( Bitbucket ):
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.loadUrl("http://example.com/");
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
final String password = "password";
final String username = "username";
final String answer = 5;
final String js = "javascript:" +
"document.getElementById('password').value = '" + password + "';" +
"document.getElementById('username').value = '" + username + "';" +
"var ans = document.getElementsByName('answer');" +
"ans[0].value = '" + answer + "';" +
"document.getElementById('fl').click()";
if (Build.VERSION.SDK_INT >= 19) {
view.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
}
});
} else {
view.loadUrl(js);
}
}
});
@ user802467ソリューションを試しましたが、2つの点で異なる動作がありました
これが私が使ったものです(しかしうまくいきませんでした)
view.loadUrl("javascript: var x = document.getElementById('username').value = '" + username + "';" +
"var y = document.getElementById('password').value = '" + password + "';" +
"var form1 = document.getElementById('loginform');" +
"form1[0].submit(); ");
これは私のために働いたコードです
view.loadUrl("javascript: document.getElementById('username').value = '" + username + "';" +
" document.getElementById('password').value = '" + password + "';" +
"var z = document.getElementById('submitbutton').click();"
);
わたしにはできる
webView.loadUrl("javascript:var uselessvar =document.getElementById('regno').value='"+mob+"';",null);
webView.loadUrl("javascript:var uselessvar =document.getElementById('passwd').value='"+pass+"';",null);