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

关于WKURLSchemeHandler无法处理fetch自定义协议请求的技术咨询

WKWebView自定义协议处理fetch/XHR请求的解决方案

首先明确:WKURLSchemeHandler是支持处理fetch/XMLHttpRequest请求的,你遇到的问题是缺少关键配置和响应头处理,以下是具体解决步骤:

  • 补充CSP的connect-src规则:
    之前仅配置img-src允许自定义协议,但fetch/XHR请求属于连接类请求,需要在Content Security Policy中添加connect-src规则,比如:

    Content-Security-Policy: default-src 'self'; img-src mycustomscheme://; connect-src mycustomscheme://;
    

    确保自定义协议被允许作为连接请求的源。

  • 在WKURLSchemeHandler中返回CORS响应头:
    当处理fetch/XHR请求时,WKWebView会检查跨域资源共享(CORS)规则,你需要在响应中添加必要的CORS头:
    在startURLSchemeTask:方法里,构造WKURLResponse时,必须包含Access-Control-Allow-Origin头,值要匹配页面的源(如果是file://协议的页面,可暂时设为*测试,正式环境建议更严格的匹配)。示例代码片段:

    NSDictionary *headers = @{@"Access-Control-Allow-Origin": @"*",
                              @"Content-Type": @"application/json"};
    NSURLResponse *response = [[NSURLResponse alloc] initWithURL:task.request.URL
                                                        MIMEType:@"application/json"
                                           expectedContentLength:-1
                                                textEncodingName:nil];
    [task didReceiveResponse:response];
    // 后续返回数据逻辑
    
  • 额外注意:
    allowUniversalAccessFromFileURLs仅影响file://协议页面访问其他本地文件资源,对自定义协议的fetch请求无直接作用,不需要依赖这个配置。

内容的提问来源于stack exchange,提问作者Paul Tiarks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:32:43