管理/删除正在运行的WebView2的cookie

问题描述

我正在运行Edge WebView2,并在其中加载了一些登录页面。我要自动登录

为此,我需要删除当前的cookie。我无法通过js进行操作,因为它们仅为http。 对于Edge beta浏览器,我编写了用于删除Cookie的简单Chrome扩展程序,但无法在WebView2中运行扩展程序(或者可以吗?)。

我也知道WebView2 cookie文件的位置,但是在Webview运行时无法更改它。

在WebView中执行此操作的唯一方法是打开DevTools,我在“应用程序”选项卡中将其删除

关于如何删除该cookie的任何想法?


至少要感谢在 c ++ 中使用自定义标头(可以在其中指定cookie)加载WebView2页面的示例。

解决方法

WebView2仍在积极开发中,尽管它是request that they are aware of,但它还没有cookie cookie API。

当前推荐的清除/删除cookie的方法是使用ICoreWebView2::CallDevToolsProtocolMethod并发出Network命令。这也是Microsoft在其sample browser application中演示的删除所有cookie的内容。即使在应用程序中未启用前端UI devtools,仍然可以使用DevTools API。

提供给命令的参数必须为JSON格式,因此,如果要使用Network.deleteCookies删除特定的cookie,则需要提供{"name":"<cookie name>;"}才能删除<cookie name>

m_view->CallDevToolsProtocolMethod(L"Network.deleteCookies",L"{\"name\": \"<cookie name>\";}",nullptr);

或者您也可以使用Network.clearBrowserCookies删除所有 cookie:

m_view->CallDevToolsProtocolMethod(L"Network.clearBrowserCookies",L"{}",nullptr);

注意CallDevToolsProtocolMethod异步发出的,因此,如果您需要在继续操作之前删除Cookie,则可能需要提供处理程序参数。