【问题标题】:How to logout from a website running in an Android Webview?如何从运行在 Android Webview 中的网站注销?
【发布时间】:2018-04-28 23:39:25
【问题描述】:
这是我处理登录的代码:
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 中运行的网站注销时,它开始自动登录
【问题讨论】:
标签:
javascript
java
android
login
webview
【解决方案1】:
您是否为登录页面开启了“记住我的登录”之类的设置?也许这是一个默认的复选框集?
第二个想法:可能是因为设置了cookies而导致注销后自动登录。在 here 和 here 的 web 视图中查找如何禁用 cookie 的信息
【解决方案2】:
这样做没有真正漂亮和简短的方法。
问题是每次加载新页面时,都会在每个页面上运行用于登录的代码。
要解决这个问题,您应该保存您是否已经登录到应用程序,最简单的方法如下:
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")