我正在运行 Edge WebView2,其中加载了一些登录页面。我想自动登录。
为此,我需要删除当前的 cookie。我无法通过 js 做到这一点,因为它们是 httponly 的。 对于 Edge beta 浏览器,我编写了简单的 Chrome 扩展来删除 cookie,但我无法在 WebView2 中运行扩展(或者可以?)。
我也知道 WebView2 cookies 文件所在的位置,但在 Webview 运行时我无法更改它。
在 WebView 中执行此操作的唯一方法是打开 DevTools,我在应用程序选项卡中删除了它们。
关于如何删除该 cookie 有什么想法吗?
我至少希望在 c++ 中使用自定义 header (我可以在其中指定 cookie)加载 WebView2 页面的示例。
最佳答案
更新:现在有官方 ICoreWebView2CookieManager可用于管理 cookie。 Microsoft 对该 API 的记录非常——因此最好检查他们的文档。
使用这个新的 API,只需调用 DeleteCookie
要删除单个 cookie,DeleteCookies
从域中删除所有 cookie,或 DeleteAllCookies
清除同一配置文件下的所有 cookie。
(下面保留原答案)
WebView2 仍在积极开发中,并且还没有 cookies API —— 尽管它是 request that they are aware of .
当前推荐的清除/删除 cookie 的方法是使用 ICoreWebView2::CallDevToolsProtocolMethod
并发出 Network
命令。这也是 Microsoft 在其 sample browser application 中演示的内容。删除所有cookie。使用DevTools
即使应用程序中未启用前端 UI 开发工具,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,则可能需要提供处理程序参数。
关于c++ - 管理/删除工作 WebView2 的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64293698/