using Microsoft.Web.WebView2.Core; using Microsoft.Web.WebView2.WinForms; using Microsoft.Web.WebView2.Wpf; using System; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Text.Json; namespace WindowsFormsApp2sss { public partial class WebView2 : Form { public WebView2 () { InitializeComponent (); this.Resize += new System.EventHandler (this.Form_Resize); this.Load += Form1_Load; // 新增加载事件订阅 } private async void Form1_Load (object sender, EventArgs e) { await InitializeWebView (); // 初始化WebView2并订阅事件 } private async Task InitializeWebView () { // 确保WebView2环境初始化完成 await webView21.EnsureCoreWebView2Async (); // 订阅新窗口请求事件(关键修复点) webView21.CoreWebView2.NewWindowRequested += CoreWebView2_NewWindowRequested; webView21.CoreWebView2.WebResourceResponseReceived += CoreWebView2_WebResourceResponseReceived; webView21.CoreWebView2.AddWebResourceRequestedFilter ("*", CoreWebView2WebResourceContext.All); webView21.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested; } private void CoreWebView2_WebResourceRequested (object sender, CoreWebView2WebResourceRequestedEventArgs e) { var request = e.Request; Console.WriteLine ($"Request intercepted: {request.Uri}"); } private void CoreWebView2_NewWindowRequested (object sender, CoreWebView2NewWindowRequestedEventArgs e) { // 修复核心逻辑:必须设置 e.NewWindow 并保持 e.Handled = true e.Handled = true; e.NewWindow = (CoreWebView2)sender; // 将新窗口请求重定向到当前WebView2实例 // 更新地址栏并导航(可选) addressBar.Text = e.Uri; webView21.CoreWebView2.Navigate (e.Uri); } private static void CoreWebView2_WebResourceResponseReceived (object sender, CoreWebView2WebResourceResponseReceivedEventArgs e) { var uri = e.Request.Uri; Console.WriteLine ($"Response received for: {uri}"); e.Response.Headers.ToList ().ForEach (header => { Console.WriteLine ($"Header: {header.Key} - {header.Value}"); }); } private void button1_Click (object sender, EventArgs e) { if (!string.IsNullOrEmpty (addressBar.Text)) { webView21.CoreWebView2.Navigate (addressBar.Text); } } private void Form_Resize (object sender, EventArgs e) { webView21.Size = new System.Drawing.Size ( this.ClientSize.Width - 20, this.ClientSize.Height - 60); button1.Left = this.ClientSize.Width - button1.Width - 10; addressBar.Width = button1.Left - addressBar.Left - 10; } private void webView21_Click (object sender, EventArgs e) { } private async void button2_Click (object sender, EventArgs e) { var memoryStream = new MemoryStream (); await webView21.CoreWebView2.CapturePreviewAsync (CoreWebView2CapturePreviewImageFormat.Png, memoryStream); var bytes = memoryStream.ToArray (); var saveFileDialog = new SaveFileDialog { Title = "保存截图", FileName = "网页截图.png", Filter = "PNG图片 (*.png)|*.png" }; if (saveFileDialog.ShowDialog () == DialogResult.OK) { File.WriteAllBytes (saveFileDialog.FileName, bytes); } } private async void button3_Click (object sender, EventArgs e) { var cookies = await webView21.CoreWebView2.CookieManager.GetCookiesAsync ("https://www.baidu.com"); // var cookies = await webView21.CoreWebView2.CookieManager.GetCookiesAsync ("https://www.baidu.com"); string result = "Cookie列表:\n"; foreach (var cookie in cookies) { result += $"{cookie.Name}: {cookie.Value}\n"; } MessageBox.Show (result, "Cookie信息");
} } }
|