在 WebView2 控件中,可以通过以下几种方式获取网页加载的资源列表(包括图片、脚本、CSS、AJAX请求等):
1. 使用 WebResourceRequested 事件(基础方法)
await webView.EnsureCoreWebView2Async(); // 订阅Web资源请求事件 webView.CoreWebView2.WebResourceRequested += (sender, args) => { string url = args.Request.Uri; string method = args.Request.Method; // 获取资源类型(通过Content-Type或文件扩展名) string resourceType = "Unknown"; if (args.Response != null) { string contentType = args.Response.Headers.GetHeader("Content-Type")?.ToLower(); if (contentType.Contains("text/css")) resourceType = "CSS"; else if (contentType.Contains("javascript")) resourceType = "JS"; else if (contentType.Contains("image/")) resourceType = "Image"; // 其他类型判断... } // 输出资源信息 Debug.WriteLine($"Resource: {url}, Type: {resourceType}, Method: {method}"); };
2. 使用 DevTools Protocol
await webView.EnsureCoreWebView2Async(); // 启用网络跟踪 await webView.CoreWebView2.CallDevToolsProtocolMethodAsync("Network.enable", "{}"); // 创建资源列表 List<WebResource> resourceList = new List<WebResource>(); // 订阅网络响应事件 var receiver = webView.CoreWebView2.GetDevToolsProtocolEventReceiver("Network.responseReceived"); receiver.DevToolsProtocolEventReceived += (sender, e) => { dynamic response = Newtonsoft.Json.JsonConvert.DeserializeObject(e.ParameterObjectAsJson); string url = response.response.url; string mimeType = response.response.mimeType; int status = response.response.status; // 添加到资源列表 resourceList.Add(new WebResource { Url = url, MimeType = mimeType, StatusCode = status, ResourceType = response.type.ToString() }); // 实时显示 Debug.WriteLine($"Loaded: {url} ({mimeType})"); }; // 定义资源类 public class WebResource { public string Url { get; set; } public string MimeType { get; set; } public int StatusCode { get; set; } public string ResourceType { get; set; } }