【问题标题】:Manage/Delete cookies of working WebView2管理/删除工作 WebView2 的 cookie
【发布时间】:2021-01-25 08:11:08
【问题描述】:

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

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

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

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

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


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

【问题讨论】:

  • WebView2 还没有功能齐全的 cookie API,但它们有一个 devtools API,您可以使用它来发出开发工具命令。这实际上是删除 cookie 的推荐方法。如果没有其他人这样做,我会尝试拉一些链接并发布答案
  • @Human-Compiler 如果您提供一个示例,或者至少提供一个学习链接,我将不胜感激。另外,似乎我看到的似乎与您所说的相似,有一个名为...calldevtoolsmethodasync 或类似名称的方法,但它是用于C#
  • 是的,这就是 API。大多数(如果不是全部)C# API 也可作为 C++ API 使用。如果您还没有看到它,Microsoft 有一个 Browser Example Repository,这是一个很好的参考来源——他们使用这个 API 来清除所有 cookie(我也在我的答案中链接了)。有一个对适当 cookie API 的开放请求,但目前建议使用 devtools API

标签: c++ winapi webview2


【解决方案1】:

更新:现在有一个官方的ICoreWebView2CookieManager 可以用来管理cookies。 Microsoft非常很好地记录了这个 API - 所以最好检查他们的文档。

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

(下面保留原答案)


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

目前推荐的清除/删除 cookie 的方法是使用 ICoreWebView2::CallDevToolsProtocolMethod 并发出 Network 命令。这也是微软在他们的sample browser application 中展示的删除所有 cookie 的内容。即使应用程序中未启用前端 UI 开发工具,使用 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,则可能需要提供处理程序参数。 p>

【讨论】:

    猜你喜欢
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2023-03-17
    相关资源
    最近更新 更多