Cefsharp 清除 wpf 中的缓存、cookie 和浏览器数据

Posted

技术标签:

【中文标题】Cefsharp 清除 wpf 中的缓存、cookie 和浏览器数据【英文标题】:Cefsharp clearing cache,cookies and browser data in wpf 【发布时间】:2018-05-24 04:41:03 【问题描述】:

我正在使用 cefsharp 浏览器作为其中一部分的银行设备上开发应用程序。因为这个应用程序将被任何人使用,它不应该保存下一个用户可以看到的前一个用户的任何数据。我想在关闭后清除所有缓存的浏览器数据。

public void InitBrowser()
    
        settings = new CefSettings();
        settings.CachePath = AppDomain.CurrentDomain.BaseDirectory + "cache";
        settings.CefCommandLineArgs.Add("disable-application-cache", "1");
        settings.CefCommandLineArgs.Add("disable-session-storage", "1");
        if (!Cef.IsInitialized) Cef.Initialize(settings);
        webBrowser = new CefSharp.Wpf.ChromiumWebBrowser();
        MainGrid.Children.Add(webBrowser);
    

我想在调用名为WebPages_Exit 的函数后清除所有缓存的数据。如何在不删除浏览器实例或关闭 CEF 的情况下删除所有缓存数据,因为 CEF 无法初始化两次,并且在处理后创建另一个浏览器实例不起作用。

我在ICookieVisitor 中实现了visit 函数来保存cookie,并使用了deleteCookies 或禁用缓存cefSetting 命令等方法,但没有任何效果,因为cookie 列表为空且IcookieVisitorvisit 函数永远不会叫。似乎它被保存在另一部分,只是在 CEF 关闭时重置。

【问题讨论】:

【参考方案1】:

您可以在调用Cef.Initialize之前删除缓存文件夹:

Directory.Delete(cacheDirBase + "\\blob_storage", true);
Directory.Delete(cacheDirBase + "\\Cache", true);
Directory.Delete(cacheDirBase + "\\Code Cache", true);
Directory.Delete(cacheDirBase + "\\GPUCache", true);
Directory.Delete(cacheDirBase + "\\Local Storage", true);
Directory.Delete(cacheDirBase + "\\Session Storage", true);

只要删除你不想删除的。

【讨论】:

【参考方案2】:

我找到了答案!这是因为禁用缓存设置。 通过这样做,它实际上缓存了数据,但将无法访问。例如,您无法在不关闭CEF 的情况下删除 cookie。因此,如果您启用缓存设置(将其保留为默认设置),您可以使用Cef.GetGlobalCookieManager().DeleteCookies("", "") 删除它们。

【讨论】:

DeleteCookies() 只会删除cookies,不会删除css、js等缓存数据。为此我认为您需要使用Browser.GetBrowser.Reload(True) 请注意,Cef.GetGlobalCookieManager() 可以根据某些条件返回 null。

以上是关于Cefsharp 清除 wpf 中的缓存、cookie 和浏览器数据的主要内容,如果未能解决你的问题,请参考以下文章

名称空间“clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf”中不存在名称 ChromiumWebBrowser

cefsharp wpf wpf加载svg 在同一个页面中打开链接

CefSharp For WPF基本使用

wpf中DataGrid如何清空缓存

cef如何缓存文件翻译

cefsharp wpf怎么用