[Webkit-unassigned] [Bug 284516] New: 我在使用 WKWebView 加载本地 HTML 文件后,尝试通过 Axios 发起对外部域名的接口请求,出现了跨域问题

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Dec 12 00:40:41 PST 2024


https://bugs.webkit.org/show_bug.cgi?id=284516

            Bug ID: 284516
           Summary: 我在使用 WKWebView 加载本地 HTML 文件后,尝试通过 Axios
                    发起对外部域名的接口请求,出现了跨域问题
           Product: WebKit
           Version: WebKit Nightly Build
          Hardware: iPhone / iPad
                OS: iOS 16
            Status: NEW
          Severity: Blocker
          Priority: P2
         Component: Page Loading
          Assignee: webkit-unassigned at lists.webkit.org
          Reporter: 990219310 at qq.com
                CC: beidson at apple.com

1 我在使用 WKWebView 加载本地 HTML 文件后,尝试通过 Axios 发起对外部域名的接口请求,出现了跨域问题。我的本地文件是通过 loadFileURL:allowingReadAccessToURL: 方法加载的,Axios 请求的接口是例如这种域名 https://fundaccount.chinaclear.cn/api,浏览器返回了跨域错误。” 需要确定的是我们服务器不支持全部跨域操作,无法设置Access-Control-Allow-Origin
2 然后我通过设置 allowfileAccessFromFileURLs 为YES 这种方法解决了这个问题
3 但是如果iPhone设备打开了锁定模式。在设置中可以开启这个模式。这个时候第二步就不起作用了,导致跨域报错
4 现在我们是通过WKURLSchemeHandler实现, 自定义sheme拦截
具体代码是(void)webView:(WKWebView *)webView startURLSchemeTask:(id<WKURLSchemeTask>)urlSchemeTask {
    NSURL *url = urlSchemeTask.request.URL;
    NSLog(@"jess test%@", url);
    if ([url.pathExtension isEqualToString:@"html"] && [url.host isEqualToString:@"fundaccount.chinaclear.cn"]) {
        NSString* propertyPath = [[NSBundle mainBundle] pathForResource:@"" ofType:@"html" inDirectory:@"asset"];
        NSData *data = [[NSData alloc] initWithContentsOfFile:propertyPath];
        NSMutableDictionary *resHeader = [NSMutableDictionary new];
        [resHeader setValue:@"*" forKey:@"Access-Control-Allow-Origin"];
        [resHeader setValue:@"charset=UTF-8" forKey:@"Content-Type"];
        [resHeader setValue:@"text/html" forKey:@"Content-Type"];
        NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:url statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:resHeader];
        [urlSchemeTask didReceiveResponse:response];
        [urlSchemeTask didReceiveData:data];
        [urlSchemeTask didFinish];
这种方式 
5 通过这种方式解决了加载本地文件跨域问题 我想确定这种方法是否是苹果支持的解决加载本地跨域的方法。
6 现在通过查阅文档说明 这种方法也有一些问题存在,希望您那里提供一下解决这种情况的官方答复
7 还想问的是我遇到的这种按情况,主要是设置allowfileAccessFromFileURLs后在手机为锁定模式下跨域问题
是否你们那里知晓这种情况
8 期望您提供官方解决我遇到问题的方法

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20241212/7719f5bc/attachment-0001.htm>


More information about the webkit-unassigned mailing list