【问题标题】:How to clear all WebView stored information?如何清除所有 WebView 存储的信息?
【发布时间】:2017-06-12 14:51:46
【问题描述】:

我有一个 Android 浏览器,我可以选择清除缓存、存储、cookie 等。

代码如下所示:

webView.clearCache(true);
webView.clearFormData();
webView.clearHistory();
webView.clearSslPreferences();
CookieManager.getInstance().removeAllCookies(null);
CookieManager.getInstance().flush();

这似乎适用于我的所有测试,但是当我访问 google.com 时,我的旧搜索仍然存在。我没有清除什么?

谢谢。

【问题讨论】:

  • 我不确定它是否和removeAllCookies一样,但是你可以试试CookieManager.getInstance().removeSessionCookie();吗?
  • 找到解决方案WebStorage.getInstance().deleteAllData();
  • @casolorz 请看看我的回答
  • 我对 deleteAllData() 没有任何问题,并且从未收到过关于 crashlytics 的崩溃报告,有数十万用户在使用此应用程序。
  • 嗨!调用 CookieManager.getInstance().flush(); 的目的是什么? ?根据文档developer.android.com/reference/android/webkit/… 这与清除 cookie 无关...

标签: android webview android-webview


【解决方案1】:

找到解决办法:

WebStorage.getInstance().deleteAllData();

【讨论】:

    【解决方案2】:

    我有一个root-access 授权设备,发现调用WebStorage.getInstance().deleteAllData(); 和类似代码不会清除WebViewapplicationDatadir/app_webview 创建的cache

    此外,这些代码有时会导致致命错误,例如 A/libc: Send stop signal to pid:16145 in void debuggerd_signal_handler(int, siginfo_t*, void*)

    而且它(缓存)的大小并没有那么小。

    要实现这一点,您可以使用以下代码 sn-p :

    public static void clearWebViewCachesCustom(Context context) {
        try {
            String dataDir = mContext.getPackageManager().getPackageInfo(context.getPackageName(), 0).applicationInfo.dataDir;
            new File(dataDir + "/app_webview/").delete();
        } catch (Exception e) {
            if (!MainActivity.deBugTest) Crashlytics.logException(e);
            e.printStackTrace();
            e.getSuppressed();
        }
    }
    

    【讨论】:

    • 为什么需要所有这些技巧,getContext().getApplicationInfo().dataDir 是有据可查的获取方法。
    • 另一方面,您必须删除app_webview的所有文件和子文件夹;幸运的是,在 Kotlin 中你有 File.deleteRecursively()
    猜你喜欢
    • 2017-08-24
    • 1970-01-01
    • 2016-10-10
    • 2018-12-12
    • 2012-05-28
    • 2015-01-17
    • 1970-01-01
    • 2012-03-13
    • 2016-11-02
    相关资源
    最近更新 更多