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

请参考: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 总是为 loadUrl 上的 javascript getElementById 返回 null

2)您需要使用它来访问您的php代码中的变量,view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';"); 正如您在我的代码中看到的那样,我使用了@gnpaolo提出的解决方案,但它对我不起作用,所以我评论它并使用这个。(参考:如何将字符串注入 Android WebView

最后,只想补充一点,您不需要创建特殊的 javascript。

另一件事forms[0]是变量在 php 表单中的位置,就我而言,我有用户的电子邮件,所以我写了view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';");

希望,这可以帮助其他人。

于 2015-07-03T09:05:18.393 回答