在WebView中使用js注入设置TextBox值

时间:2016-03-11 10:51:01

标签: javascript java android webview javascript-injection

使用Android Studio我试图在不是我的网页的登录表单中设置文本框的值。

这是我用来在页面上工作的webView:

final WebView webView = (WebView) findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setWebChromeClient(new WebChromeClient());
    webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    webView.setWebViewClient(new WebViewClient()
    {
        @Override
        public void onPageFinished(WebView view, String url)
        {
            webView.loadUrl("javascript: document.getElementById('j_password').value = 'something'");
        }
    });
    webView.loadUrl("http://sg18224.scuolanext.info/");

问题是当页面加载完毕而不是设置文本框值时,整个页面变为白色,它只显示我试图设置为值的字符串(在这种情况下"某些" )。 如果我在这样的警报中包含js行:

webView.loadUrl("javascript: alert(document.getElementById('j_password').value = 'something')");

它有效!但也会显示我不想显示的提醒。

2 个答案:

答案 0 :(得分:1)

这可以帮到你:

final String js = "javascript:document.getElementById('j_password').value='something';";
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        if (Build.VERSION.SDK_INT >= 19) {
            view.evaluateJavascript(js, new ValueCallback<String>() {
                @Override
                public void onReceiveValue(String s) { }
            });
        } else {
            view.loadUrl(js);
        }
     }
});

答案 1 :(得分:0)

我不确定这个答案,但你可以尝试一下。通常它应该是答案。很久没有与javascript交互了。

你可以尝试

webView.loadUrl("javascript: document.getElementById('j_password').innerHTML = 'something'");

如果不起作用,请发表评论。