Winform 使用WebView2 开辟现代应用

打印 上一主题 下一主题

主题 749|帖子 749|积分 2247

使用 WebView2 开辟现代应用

WebView2 是 Microsoft 提供的一种嵌入式浏览器控件,基于 Edge (Chromium) 引擎。它允许开辟者将现代 Web 技术(如 HTML、CSS 和 JavaScript)与桌面应用相结合,从而构建强大、灵活的用户界面。
本文将介绍 WebView2 的基本使用,并重点讲解以下几个重要功能:

  • NewWindowRequested
  • WebResourceResponseReceived
  • AddWebResourceRequestedFilter
  • WebResourceRequested
环境准备


  • 安装 WebView2 Runtime: WebView2 需要运行时支持,用户装备必须安装 WebView2 Runtime。如果未安装,可以通过以下链接下载:WebView2 Runtime
  • 引入须要的 NuGet 包: 在 Visual Studio 中,添加 Microsoft.Web.WebView2 NuGet 包。
  • 初始化 WebView2: 创建 WebView2 控件并确保其已正确初始化。以下代码查抄并安装 WebView2 Runtime:
  1. private static async Task<bool> InitializeWebView2()
  2. {
  3.     try
  4.     {
  5.         string version = CoreWebView2Environment.GetAvailableBrowserVersionString();
  6.         return !string.IsNullOrEmpty(version);
  7.     }
  8.     catch
  9.     {
  10.         // 引导用户安装 WebView2 Runtime
  11.         MessageBox.Show("WebView2 Runtime 未安装。请安装后重试。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  12.         return false;
  13.     }
  14. }
复制代码
创建 WebView2 控件

以下代码展示了怎样创建 WebView2 控件并初始化其核心功能:
  1. public static async Task<WebView2> CreateWebView()
  2. {
  3.     if (!await InitializeWebView2())
  4.     {
  5.         return null;
  6.     }
  7.     WebView2 webView2 = new WebView2
  8.     {
  9.         Dock = DockStyle.Fill
  10.     };
  11.     await webView2.EnsureCoreWebView2Async(null);
  12.     // 注册事件
  13.     webView2.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested;
  14.     webView2.CoreWebView2.WebResourceResponseReceived += CoreWebView2_WebResourceResponseReceived;
  15.     // 添加请求过滤器
  16.     webView2.CoreWebView2.AddWebResourceRequestedFilter("*://www.example.com/*", CoreWebView2WebResourceContext.Document);
  17.     webView2.CoreWebView2.WebResourceRequested += WebView2_WebResourceRequested;
  18.     return webView2;
  19. }
复制代码
拦截新窗口哀求:NewWindowRequested

默认环境下,WebView2 会实验在新窗口中打开弹出链接。通过 NewWindowRequested 变乱,我们可以拦截弹窗行为并将新内容加载到当前窗口。
示例代码:
  1. private static void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e)
  2. {
  3.     if (sender is CoreWebView2 webView)
  4.     {
  5.         e.Handled = true; // 阻止默认弹窗行为
  6.         webView.Navigate(e.Uri); // 在当前 WebView2 中加载新页面
  7.     }
  8. }
复制代码
拦截和处理网络响应:WebResourceResponseReceived

通过 WebResourceResponseReceived,我们可以查看并分析全部网络响应。例如,可以记录某些哀求的响应时间或查抄响应头信息。
示例代码:
  1. private static void CoreWebView2_WebResourceResponseReceived(object sender, CoreWebView2WebResourceResponseReceivedEventArgs e)
  2. {
  3.     var uri = e.Request.Uri;
  4.     Console.WriteLine($"Response received for: {uri}");
  5.     e.Response.Headers.ToList().ForEach(header =>
  6.     {
  7.         Console.WriteLine($"Header: {header.Key} - {header.Value}");
  8.     });
  9. }
复制代码
添加哀求过滤器:AddWebResourceRequestedFilter

为了提高性能并精确控制,WebView2 提供了 AddWebResourceRequestedFilter 方法,用于定义需要监听的哀求类型和范围。
使用方法:
  1. webView.CoreWebView2.AddWebResourceRequestedFilter(
  2.     "*://www.example.com/*", // 目标 URL 模式
  3.     CoreWebView2WebResourceContext.Document // 资源类型:仅文档
  4. );
复制代码
拦截网络哀求:WebResourceRequested

通过 WebResourceRequested 变乱,可以拦截网络哀求并举行处理,例如修改哀求头或阻止特定哀求。
示例代码:
  1. private static async void WebView2_WebResourceRequested(object sender, CoreWebView2WebResourceRequestedEventArgs e)
  2. {
  3.     var request = e.Request;
  4.     // 检查是否有特定 Cookie
  5.     if (sender is CoreWebView2 webView)
  6.     {
  7.         var cookies = (await webView.CookieManager.GetCookiesAsync(request.Uri))
  8.                         .Where(c => c.Name == "SpecificCookie").ToList();
  9.         if (cookies.Any())
  10.         {
  11.             // 删除特定 Cookie
  12.             cookies.ForEach(c => webView.CookieManager.DeleteCookie(c));
  13.         }
  14.     }
  15.     Console.WriteLine($"Request intercepted: {request.Uri}");
  16. }
复制代码
总结

WebView2 是一个强大的控件,为开辟者提供了丰富的功能来控制和定制 Web 资源的加载行为。通过本文介绍的变乱和方法,你可以:

  • 阻止默认弹窗行为 (NewWindowRequested)
  • 分析网络响应 (WebResourceResponseReceived)
  • 精确过滤需要拦截的哀求 (AddWebResourceRequestedFilter)
  • 修改或阻止网络哀求 (WebResourceRequested)
借助这些功能,可以更灵活地将 Web 内容集成到桌面应用程序中,满足各种业务需求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户国营

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表