1

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

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

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

在 WebView 中做到这一点的唯一方法是打开 DevTools,我在应用程序选项卡中删除了它们。

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


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

4

1 回答 1

3

更新:现在有一个官方的ICoreWebView2CookieManager可用于管理 cookie。微软对这个 API 的记录非常好——所以最好检查他们的文档。

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

(原答案保留在下面)


WebView2 仍在积极开发中,还没有 cookie API——尽管他们知道这是一个请求

当前推荐的清除/删除 cookie 的方法是使用ICoreWebView2::CallDevToolsProtocolMethod并发出Network命令。这也是微软在其示例浏览器应用程序中演示的删除所有 cookie 的内容。DevTools即使未在应用程序中启用前端 UI 开发工具,使用API 仍然有效。

提供给命令的参数必须是 JSON 格式,因此如果您想使用 删除特定 cookie Network.deleteCookies,则需要提供{"name":"<cookie name>;"}delete <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,则可能需要提供处理程序参数。

于 2020-10-10T13:19:50.843 回答