问题描述
我正在运行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,则可能需要提供处理程序参数。