提问者:小点点

如何从运行在Android Webview中的网站注销?


这是我处理登录的代码:

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中的网站注销时,它开始自动登录


共2个答案

匿名用户

登录页面是否开启了“记住我的登录”这样的设置?也许是默认的复选框设置?

第二个想法:也许注销后自动登录是因为设置了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")