You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:45:37