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 列表为空且IcookieVisitor
的visit
函数永远不会叫。似乎它被保存在另一部分,只是在 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