Fill form in WebView with Javascript

后端 未结 4 1477
旧时难觅i
旧时难觅i 2020-12-05 19:33

I\'m trying to fill Webforms from a Webview in Android. I\'ve already found this piece of code here: Fill fields in webview automatically

String username = \         


        
相关标签:
4条回答
  • 2020-12-05 20:18

    I had the same issue, and after following different explanations on stackOverflow, I succeed to make mine working.

    here is my approach

    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 things : 1) you need to add this line webView.getSettings().setDomStorageEnabled(true); (reference: Android WebView always returns null for javascript getElementById on loadUrl)

    2) you need to access the variable in your php code by using this view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';"); as you can see in my code I used the solution proposed by @gnpaolo, but it didn't work for me so I commented it and use this one. (reference: How to inject a String into Android WebView)

    Finally, just want to add that you do not need to create a special javascript.

    one more thing the forms[0] is the position of the variable in the php form, and in my case, I have the email of the user, so I wrote view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';");

    Hope, this can help others.

    0 讨论(0)
  • 2020-12-05 20:20

    Just Enable DomStorage and write "var x=" to string:

    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);
    }
    });
    
    0 讨论(0)
  • 2020-12-05 20:21

    You should fill the values after the page has been loaded. This is an example using your code:

    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 讨论(0)
  • 2020-12-05 20:27

    Android 4.4 new WebView have the issue with use loadUrl("javascript:") method, the paramter string will be url-decode before execution. You can try use evaluateJavascript() for API >= 19 and loadUrl() for API < 19. The code below is work for me.

        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);
                }
           });
        }
    

    please refer: loadUrl("javascript:....") behaviour changed incompatibly in Android 4.4

    0 讨论(0)
提交回复
热议问题