14

Android の Webview から Webforms に入力しようとしています。私はすでにこのコードをここで見つけました: Fill fields in webview automatically

String username = "cristian";
webview.loadUrl("javascript:document.getElementById('username').value = '"+username+"';");

残念ながら、入力したいページを開く必要がある場所がわかりません。

setContentView(R.layout.web);
final WebView mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(url);
String user="u";
String pwd="p";
mWebView.loadUrl("javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';");

この方法で試してみると、サイトは表示されますが、フォームに値がありません。

助けてくれてありがとう

4

4 に答える 4

24

Android 4.4 の新しい WebView には useloadUrl("javascript:")メソッドに関する問題があり、パラメータ文字列は実行前に url-decode になります。evaluateJavascript()API >= 19 およびAPI < 19 で使用を試すことができloadUrl()ます。以下のコードは私にとってはうまくいきます。

    mWebView.loadUrl(url)
    WebSettings settings = mWebView.getSettings();
    settings.setJavaScriptEnabled(true);

    String js = "javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';";
    mWebView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);

            if (Build.VERSION.SDK_INT >= 19) {
                view.evaluateJavascript(js, new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String s) {

                    }
                });
            } else {
                view.loadUrl(js);
            }
       });
    }

参照してください: loadUrl("javascript:....") 動作が Android 4.4 で非互換に変更されました

于 2015-08-20T10:11:26.850 に答える
22

ページが読み込まれた後に値を入力する必要があります。これはあなたのコードを使用した例です:

mWebView.loadUrl(url);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView view, String url) {
        String user="u";
        String pwd="p";
        view.loadUrl("javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';");
    }
});
于 2012-11-12T15:40:23.057 に答える
2

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);
}
});
于 2018-01-19T21:22:21.710 に答える
1

私は同じ問題を抱えていました.stackOverflowに関するさまざまな説明に従った後、私はうまく機能するようになりました.

ここに私のアプローチがあります

webView.loadUrl(url);
        webView.getSettings().setDomStorageEnabled(true);
        webView.setWebViewClient(new WebViewClient(){
            public void onPageFinished(WebView view, String url) {
                String email="email@email.jp";

                //view.loadUrl("javascript:document.getElementById('email').value = '"+email+"'");
                view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';");
                Log.d("email", "can not add email");
            }
        });

2 つのこと: 1) この行を追加する必要がありますwebView.getSettings().setDomStorageEnabled(true);(参照: Android WebView は常に javascript getElementById on loadUrl に対して null を返します)

view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';"); 2)私のコードでわかるように、これを使用してphpコードの変数にアクセスする必要があります。 @gnpaoloによって提案されたソリューションを使用しましたが、うまくいかなかったので、コメントしてこれを使用しました。(参考: Android WebView に文字列を注入する方法)

最後に、特別な JavaScript を作成する必要がないことを付け加えておきます。

もう1つforms[0]、php形式の変数の位置です。私の場合、ユーザーのメールアドレスがあるので、書きましたview.loadUrl("javascript:document.forms[0].email.value = '"+email+"';");

うまくいけば、これは他の人を助けることができます.

于 2015-07-03T09:05:18.393 に答える