这是我处理登录的代码:
wblogin.getSettings().setJavaScriptEnabled(true);
wblogin.loadUrl("http://mywebsite.com/login.php");
wblogin.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
wblogin.loadUrl("javascript: {" +
"document.getElementById('email').value = '" + user_name + "';" +
"document.getElementById('password').value = '" + pass_name + "';" +
"document.getElementById('xyz').click();" +
"};");
}
});
当我从运行在Webview中的网站注销时,它开始自动登录
登录页面是否开启了“记住我的登录”这样的设置?也许是默认的复选框设置?
第二个想法:也许注销后自动登录是因为设置了cookie。在此处和此处查找如何在webview中禁用cookie的信息
问题是,每次加载新页面时,您都会在每个页面上运行登录代码。
要解决这个问题,您应该保存已经登录到应用程序的阉羊,最简单的方法如下:
wblogin.setWebViewClient(new WebViewClient() {
private boolean shallLogin = true;
@Override
public void onPageFinished(WebView view, String url) {
if (shallLogin == true) {
wblogin.loadUrl("javascript: {" +
"document.getElementById('email').value = '" + user_name + "';" +
"document.getElementById('password').value = '" + pass_name + "';" +
"document.getElementById('xyz').click();" +
"};");
shallLogin = false;
}
}
});
由于登录可能会失败,或者用户可能会在没有登录的情况下四处走动,更合适的方法是注册一个JS回调,并在页面重新加载时通过ID找到一个元素来检查登录是否成功,该元素仅在登录时可见,如用户图像或其他内容。
...
@Override
public void onPageFinished(WebView view, String url) {
wblogin.loadUrl("javascript: {" +
"window.ANDROID_CALLBACK.login(document.getElementsByClassName('.my-user-img').length > 0);"
"};");
}
...
class LoadListener {
public LoadListener (MyWebViewClient myWebViewClient) {
}
public void login(boolean loginWorked) {
wblogin.shallLogin = !loginWorked;
}
}
...
wblogin.addJavascriptInterface(new LoadListener(wblogin), "ANDROID_CALLBACK")