CefSharp 如何在关闭选项卡时像真实浏览器一样清除当前网页

CefSharp how to clear current webpage like real browser does when closing the tab

我有一个网站,用户可以在那里登录以访问他们的个人资料。 在 google chrome 或其他网络浏览器中,我可以打开网站并在那里登录。 要注销,网站会向我的网站发送请求 api。 在没有注销的情况下关闭选项卡后,我在新选项卡中加载了我的网站,它要求我登录。 这是一个很好的行为。

但是当我在 CefSharp Chromium Browswer (CefSharp.WinForms 79.1.360) 中打开这个网站时,我无法自动注销用户。 我使用下一个方法清除所有数据,然后加载起始页:

await Cef.GetGlobalCookieManager().DeleteCookiesAsync(string.Empty, string.Empty);

我的设置是:

Cef.EnableHighDPISupport();
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
CefSharpSettings.WcfEnabled = true;

var settings = new CefSettings();
settings.CefCommandLineArgs.Remove("disable-gpu-compositing");
Cef.Initialize(settings);

我使用下一个处理程序:

Browser = new ChromiumWebBrowser(ConfigProvider.HomeUrl)
{
   KeyboardHandler = new KeyboardHandler(),
   RequestHandler = new RequestHandler(),
   LifeSpanHandler = new LifeSpanHandler(_popupUrlsWhiteList),
   MenuHandler = new MenuHandler(),
   DownloadHandler = downloadHandler
};

但是用户没有注销。我尝试将缓存存储在本地文件夹中(使用 CefSettings),但它也没有用。

此方法适用于许多使用 cookie 来存储登录用户的网站。在我清除 cookie 后,它们会自动注销。但对于这个网站,它不起作用。此站点不使用 cookie 来存储登录信息,注销是通过其网站 api 执行的。这个网站实际上不是我的,我没有源代码。

我能否以某种方式让 CefSharp 像常规 google chrome 那样在关闭标签页时清除浏览器中的会话?

用户通过按下站点 header 上的按钮注销,并向服务器发送一个 http 请求以注销用户。 我可以通过 Browser.GetMainFrame().ExecuteJavaScriptAsync(JsMethods.GetClearSessionMethod())

让用户自动注销

这只是简单的工作:

localStorage.clear();
sessionStorage.clear();

问题是用户 "logged info" 存储在 sessionStorage 中,并且没有通过调用

清除
await Cef.GetGlobalCookieManager().DeleteCookiesAsync(string.Empty, string.Empty);