在 WebView2 中取消对 Web 资源的请求

Cancel request for web resource in WebView2

我正在开发一个电子邮件应用程序,我想在 WebView2 中显示邮件消息。我想让用户选择是否下载 Html 邮件中的远程资源(出于安全原因)。如何在 WebView2 中取消请求的资源?

我尝试订阅该活动 webView.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested;

但是当调用事件处理程序时,我没有看到取消请求的方法。

取消对资源的请求的方法是将 CoreWebView2WebResourceRequestedEventArgs 参数的 Response 属性 设置为 虚拟响应 .

但是,在执行此操作之前,您必须调用 CoreWebView2.AddWebResourceRequestedFilter 来指定要触发 WebResourceRequested 事件的资源类型。

这是一个示例,它将过滤掉所有对图像的请求:

using Microsoft.Web.WebView2.Core;

private async void Form1_Load(object sender, EventArgs e)
{
    await webView21.EnsureCoreWebView2Async();
}

private void WebView21_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{
    webView21.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested;
    webView21.CoreWebView2.AddWebResourceRequestedFilter(null, Microsoft.Web.WebView2.Core.CoreWebView2WebResourceContext.Image);
    webView21.CoreWebView2.Navigate("https://whosebug.com");
}

private void CoreWebView2_WebResourceRequested(object sender, CoreWebView2WebResourceRequestedEventArgs e)
{
        e.Response = webView21.CoreWebView2.Environment.CreateWebResourceResponse(null, 404, "Not found", null);
}

如果愿意,您当然可以使用更多过滤逻辑。