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

Set TextBox value with js injection in a WebView

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

问题是当页面完成加载而不是设置文本框值时,整个页面变成白色并且它只显示我试图设置为值的字符串(在本例中 "something") . 如果我在这样的警报中包含 js 行:

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

有效!但也会显示我不想显示的警报。

我不确定这个答案,但你可以试试。通常它应该是答案。不过好久没和javascript互动了。

你可以试试

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

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

这应该对您有帮助:

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