使用Javascript在WebView中填写表单

Jay*_*Jay 14 javascript android android-webview

我正试图从Android中的Webview填充Webforms.我已经在这里找到了这段代码:自动填写webview中的字段

String username = "cristian";
webview.loadUrl("javascript:document.getElementById('username').value = '"+username+"';");
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不明白我要打开我要填写的页面.

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+"';");
Run Code Online (Sandbox Code Playgroud)

当我以这种方式尝试时,网站会显示但表单中没有任何值.

在此先感谢您的帮助

小智 21

您应该在页面加载后填写值.这是使用您的代码的示例:

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+"';");
    }
});
Run Code Online (Sandbox Code Playgroud)


awi*_*ind 21

Android 4.4新的WebView有使用loadUrl("javascript:")方法的问题,参数字符串将在执行前进行url-decode.您可以尝试使用evaluateJavascript()API> = 19和loadUrl()API <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);
            }
       });
    }
Run Code Online (Sandbox Code Playgroud)

请参考:loadUrl("javascript:....")在Android 4.4中更改不兼容的行为