2012-04-17 21 views
12

私はAndroidのWebviewからWebformsを埋めようとしています。 私はすでにここのコードのこの部分を見つけた:Fill fields in webview automaticallyJavascriptを使ってWebViewにフォームを記入してください。

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+"';"); 

私はそれをこのようにしようとします。サイトは表示されますが、フォームに値は表示されません。

ありがとうございます。

+0

ねえ。任意の完全な例を参照してください。私は前にこの種のコードで作業していません。 –

+0

これは私のために働いた[javascriptを使用してWebViewで複数のデータを渡す](https://stackoverflow.com/a/48349575/8018480) –

答えて

19

ページが読み込まれた後に値を入力してください。これはあなたのコードを使用した例です。

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+"';"); 
    } 
}); 
+0

あなたのcode.webページがロードされていますが、フィールドはそのデータで満たされていません.itは空のみです。これのためにJavaScriptコードを書く方法を教えてください。 – user1213202

+0

要素 'username'または 'password'に別の名前を付けることができます。これらの名前は、Webページの実際のフィールド名で置き換える必要があります。 – gnpaolo

+0

ねえ。任意の完全な例を参照してください。私は前にこの種のコードで作業していません。 –

0

私は同じ問題を持っていた、とのStackOverflow上の別の説明に従った後、私は私の作業を行うことが成功します。ここ

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

       //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つの物事私のアプローチです:あなたはこの行webView.getSettings().setDomStorageEnabled(true);を追加する必要が 1)(参照:Android WebView always returns null for javascript getElementById on loadUrl

2)あなたがして、PHPコード内の変数にアクセスする必要がありますこのview.loadUrl("javascript:document.forms[0].email.value = '"+email+"';"); を私のコードで見ることができますが、@gnpaoloが提案した解決方法を使用しましたが、それは私のためには機能しませんでした。 (参照:How to inject a String into Android WebView

最後に、特別なjavascriptを作成する必要はありません。

もう一つforms[0]は、PHPのフォーム内の変数の位置であり、私の場合、私は、ユーザーの電子メールを持っているので、私はview.loadUrl("javascript:document.forms[0].email.value = '"+email+"';");

希望、これは他の人を助けることができると書きました。

16

Android 4.4の新しいWebViewにはloadUrl("javascript:")メソッドの問題があり、実行前にパラメータの文字列がurl-decodeになります。 API> = 19の場合はevaluateJavascript()、APIの場合はloadUrl()を使用してみてください。< 19. 以下のコードは私の仕事です。

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:....") behaviour changed incompatibly in Android 4.4

+0

あなたのコードが何をしているのか、なぜそれが問題を解決するのかについての詳しい説明を追加するには、あなたの投稿を編集することを検討してください。ほとんどの場合、コードが含まれていても(たとえそれが機能していても)、OPが問題を理解するのに役立たない場合があります。 – SuperBiasedMan

+0

フォームデータを送信した後、@awindはajaxレスポンスを受け取ることができますか?リモートURLからwebviewでWebページを表示する –

+0

素晴らしい!この回答は2015年以来より正確です)) – micsha123

0

をするだけDomStorageを有効にして、文字列に "X = VAR" を書く:

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); 
} 
}); 
関連する問題