关于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
相关产品推荐
相关产品推荐

