Manage/Delete 工作 WebView2 的 cookie

Manage/Delete cookies of working WebView2

我 运行ning Edge WebView2 加载了一些登录页面。我想做一个自动登录。

为此,我需要删除当前的 cookie。我不能通过 js 做到这一点,因为它们是 httponly。 对于 Edge beta 浏览器,我编写了用于删除 cookie 的简单 Chrome 扩展,但我不能 运行 WebView2 中的扩展(或者可以吗?)。

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

在 WebView 中执行此操作的唯一方法是打开 DevTools,我在应用程序选项卡中删除了它们。

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


我至少希望在 c++.

中使用自定义 header(我可以在其中指定 cookie)加载 WebView2 页面的示例

更新:现在有一个官方的ICoreWebView2CookieManager可以用来管理cookies。 Microsoft 对此 API 非常 进行了很好的记录——因此最好查看他们的文档。

有了这个新的 API,只需调用 DeleteCookie 删除单个 cookie,调用 DeleteCookies 删除域中的所有 cookie,或调用 DeleteAllCookies 清除同一配置文件下的所有 cookie。

(下面保留原答案)


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

目前推荐的 clearing/deleting cookie 方法是使用 ICoreWebView2::CallDevToolsProtocolMethod and issue a Network command. This is also what Microsoft demonstrates in their sample browser application 删除所有 cookie。使用 DevTools API 仍然有效,即使 front-end UI 开发工具未在应用程序中启用。

提供给命令的参数必须是 JSON 格式,所以如果你想使用 Network.deleteCookies 删除特定的 cookie,你需要提供 {"name":"<cookie name>;"} 来删除 <cookie name>:

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

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

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

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