检查登录错误Android WebView Javascript

Check login error Android-WebView Javascript

本文关键字:WebView Javascript Android 错误 登录 检查      更新时间:2023-09-26

如果登录失败或成功,如何在Android WebView中进行检查?由于用户名和/或密码错误导致登录失败时,登录网页显示以下消息。

<div id="errorMsgId1427032461760" class="errorMessage"> 

如何使用JavaScript进行检查?(调用next活动有效,但它总是调用next。所以我想运行此检查)。

编辑:我尝试将JavaScript接口添加到webView.loadURL()中,但没有成功。

webView.loadUrl("javascript: if(document.body.innerHTML.toString().indexOf('Invalid') > -1){'n" +
                    "         JSInterface.changeActivity() ;");

第2版:如何使用这个?

if(document.body.innerHTML.toString().indexOf("invalid") > -1){ alert("invalid'"); 

如果未调用警报,则调用Intent。(警报可以是任何功能)。

编辑3:

我尝试了onConsoleMessage,但它不起作用。这里的代码:

webView.setWebChromeClient(new WebChromeClient() {@
Override
public boolean onConsoleMessage(ConsoleMessage cm) {
    String a = cm.toString();
    if (a.equalsIgnoreCase("Success")) {
        Toast.makeText(Login.this, "Login Successful", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(Login.this, Upload.class);
        Login.this.finish();
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(intent);
    }
    if (a.equalsIgnoreCase("Error")) {
        Toast.makeText(Login.this, "Please enter correct credentials", Toast.LENGTH_LONG).show();
    }
    return true;
}
});

在onPageFinished方法中为:

webView.setWebViewClient(new WebViewClient() {
        @TargetApi(Build.VERSION_CODES.KITKAT)
        @Override
        public void onPageFinished(WebView view, final String url) {
        webView.loadUrl("javascript: if (document.querySelectorAll('[type=submit]').length) {'n" +
                    "    var x = document.querySelectorAll('[type=submit]');'n" +
                    "    x[0].addEventListener('"click'", function() {'n" +
                    "        if (document.body.innerHTML.toString().indexOf('"Invalid'") > -1) console.log('"Error'");'n" +
                    "        else console.log('"Success'");'n" +
                    "    });};");
        return true;
        }
    });
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("http://192.168.0.101:9999/user");  //Local URL.

我用alert而不是console.log检查了上面的Javascript,它可以工作。

错误是什么?我想不通。

类似这样的东西:

webView.setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        if (!<login page url>.equals(url)) return;
        // Available on KitKat and later
        view.evaluateJavascript(
            "document.getElementsByClassName('errorMessage').length",
            new ValueCallback<String>() {
                @Override
                public void onReceiveValue(String errorMessageCount) {
                    if ("0".equals(errorMessageCount)) {
                        // all ok
                    } else {
                        // error message detected
                    }
                }
            }
        );
    }
});

如果你也以KitKat之前的版本为目标,那么你将不得不使用一种更复杂的方式从JS中获取结果,如下所述:如何在android的webview中从javascript中获取返回值?