【问题标题】: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而导致注销后自动登录。在 herehere 的 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")
      

      【讨论】:

        猜你喜欢
        • 2015-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多