如果登录失败或成功,如何登录Android WebView?由于用户名和/或密码不正确,登录失败时,登录网页会显示以下消息。
<div id="errorMsgId1427032461760" class="errorMessage">
如何使用JavaScript检查? (调用下一个活动有效,但它总是调用下一个活动。所以我想运行此检查。)
修改 我尝试将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并且它可以工作。
出现了什么错误?我无法弄清楚。
答案 0 :(得分:0)
这样的事情:
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获取结果,如下所述:How to get return value from javascript in webview of android?