IOS9 WKWebView Access-Control-Allow-Origin
Posted
技术标签:
【中文标题】IOS9 WKWebView Access-Control-Allow-Origin【英文标题】: 【发布时间】:2016-02-04 13:12:20 【问题描述】:我使用loadFileURL: allowingReadAccessToURL
在ios WKWebview
上加载本地html文件。
但是当我发送ajax请求时,它失败了。
错误是:
Access-Control-Allow-Origin 不允许 Origin null。
我可以设置一些属性来修复这个错误,比如在android中,我们可以使用setAllowUniversalAccessFromFileURLs
吗?
【问题讨论】:
你的ajax请求到底是什么? 【参考方案1】:你试过这样设置吗?
let config = WKWebViewConfiguration()
config.setValue(true, forKey: "allowUniversalAccessFromFileURLs")
【讨论】:
我从 CSS 中引用的图像 url 中得到了 null 错误。这解决了它。【参考方案2】:当 HTML 在本地加载(文件 URL)时,WkWebView 下面的配置设置为 WkWebView 为我工作
WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
WKUserContentController *userContentController = [[WKUserContentController alloc] init];
[theConfiguration.preferences setValue:@"TRUE" forKey:@"allowFileAccessFromFileURLs"];
[theConfiguration setValue:@"TRUE" forKey:@"allowUniversalAccessFromFileURLs"];
当您设置上述设置时,origin 将作为“file://”而不是 null 传递
【讨论】:
【参考方案3】:尝试使用 loadRequest 而不是 loadFileURL。它对我有用:
NSString* path = [[NSBundle mainBundle] pathForResource:@"pageName" ofType:@"html"];
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]];
[self.webView loadRequest:request];
在那之后,我的查询工作正常,而我之前有一个“无法从 null 发出任何请求”错误。
【讨论】:
【参考方案4】:在 Chrome 上,尽管 CORS 标头正确,但 CORS 请求无法从 localhost 进行,只是说.. 继续敲我的头
【讨论】:
【参考方案5】:如果你想从localhtml文件中读取,你必须设置allowReadAccess
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let documentsURL = URL(fileURLWithPath: documentsPath, isDirectory: true)
let finalURL = URL(string: htmlurl)
webview.loadFileURL(finalURL!, allowingReadAccessTo: documentsURL)
【讨论】:
以上是关于IOS9 WKWebView Access-Control-Allow-Origin的主要内容,如果未能解决你的问题,请参考以下文章
IOS9 WKWebView Access-Control-Allow-Origin
在 iOS 9 中遇到 WKWebview 和 UIWebView 问题
为啥我在 iOS 9 上的 WKWebView 中的音频流无法播放?
WKWebView 视口缩小以适应在 iOS 9.3 上不起作用