【问题标题】:WebView2: Is it possible to prevent a cookie in a response from being storedWebView2:是否可以防止响应中的cookie被存储
【发布时间】:2021-05-31 08:36:31
【问题描述】:

我正在使用WebView2,并希望在收到 cookie 以响应第三方资源请求时停止存储它们。

WebView2 公开了最初看起来很有希望的CoreWebView2.WebResourceResponseReceived 事件。但是,文档指出:

无法保证 WebView 处理响应和宿主应用的处理程序运行的顺序。应用的处理程序不会阻止 WebView 处理响应。

因此,无法在此事件处理程序中修改响应或删除 cookie。我想您可以记录响应并“稍后”将其删除,但这似乎很难可靠地执行。

在使用 WebView2 时,有没有办法阻止或可靠地删除响应中收到的 cookie?

【问题讨论】:

  • 如果要删除所有cookies,在关闭应用程序时,只需删除userdatafolder即可。

标签: microsoft-edge chromium webview2


【解决方案1】:

目前无法拦截和修改网络响应。

我想作为一种解决方法,您可能会尝试像您建议的那样稍后异步运行一些代码,例如在相应的 NavigationCompleted 事件期间使用 CoreWebView2.CookieManager API 删除 cookie。

另一种解决方法可能是使用 WebResourceRequested 事件来拦截请求,使用 eventargs 上的 GetDeferral 方法在您自己以本机代码执行 Web 请求时获得延迟,以​​本机代码接收响应,将响应修改为您喜欢,然后在 WebResourceRequested eventargs 中提供修改后的响应并完成延迟。然而,这有一个缺点,您需要在您使用的任何 HTTP 堆栈的请求和响应对象之间来回转换 WebView2s Web 资源请求和响应对象。

否则,您可以将您的反馈作为功能请求提交到WebView2 Feedback github project

【讨论】:

  • 谢谢@David。使用NavigationCompleted 的一个困难是它在顶级文档的导航后被触发。这是我有兴趣丢弃的带有资源子请求的 cookie。
  • 我不确定有没有好的解决方法。您可以尝试查看 DevTools 协议的方法和事件,看看是否有任何可以使用的东西。否则我想这需要一个功能请求。
猜你喜欢
  • 2010-09-23
  • 2019-02-23
  • 2011-08-27
  • 2016-06-22
  • 2011-09-25
  • 2014-06-09
  • 2011-02-17
  • 1970-01-01
  • 2017-01-02
相关资源
最近更新 更多