如何获取WebView2加载静态文件的通知以执行验证?
WebView2 捕获静态文件加载通知的实现方案
直接用WebView2内置的CoreWebView2.WebResourceRequested事件就能搞定,这是官方提供的资源拦截入口,能覆盖所有静态资源请求:
- 注册事件:等WebView2初始化完成后,绑定
WebResourceRequested事件,它会拦截WebView2发起的所有资源请求,包括图片、JS、CSS。 - 筛选目标资源:在事件处理逻辑里,通过请求URL的后缀或者请求头来筛选静态资源,比如只处理
.js/.css/.png/.jpg这类后缀的请求。 - 执行验证:拿到符合条件的请求后,直接在事件里做你的验证操作,比如检查资源来源、哈希值,甚至可以拦截非法请求。
给个C#的代码示例:
// 等WebView2初始化完成后注册事件 webView.CoreWebView2Ready += (s, e) => { webView.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested; // 确保启用资源拦截 webView.CoreWebView2.Settings.IsWebResourceRequestedEnabled = true; }; private void CoreWebView2_WebResourceRequested(object sender, CoreWebView2WebResourceRequestedEventArgs e) { // 定义要拦截的静态资源后缀集合 var staticResourceExts = new HashSet<string> { ".js", ".css", ".png", ".jpg", ".jpeg", ".gif" }; var requestUri = new Uri(e.Request.Uri); var fileExt = Path.GetExtension(requestUri.LocalPath).ToLower(); // 匹配静态资源 if (staticResourceExts.Contains(fileExt)) { // 这里执行你的验证逻辑 Console.WriteLine($"捕获静态资源请求: {requestUri.AbsoluteUri}"); // 示例:验证资源域名是否合法 if (!requestUri.Host.Equals("your-allowed-domain.com")) { // 返回403阻止非法请求 e.Response = webView.CoreWebView2.Environment.CreateWebResourceResponse( null, 403, "Forbidden", "Content-Type: text/plain"); } } }
注意事项:
- 必须在
CoreWebView2Ready事件触发后再绑定WebResourceRequested,不然会因为CoreWebView2实例未初始化报错。 - 如果要拦截HTTPS资源,若涉及自签名证书,可能需要调用
CoreWebView2.Environment.SetPermissionState设置证书相关权限,或者忽略证书错误。 - 也可以通过
e.Request.Method判断是否为GET请求(静态资源基本都是GET),进一步精准筛选。
内容的提问来源于stack exchange,提问作者pitaridis
相关产品推荐
相关产品推荐

