IOS9 WKWebView Access-Control-Allow-Origin

Posted

技术标签:

【中文标题】IOS9 WKWebView Access-Control-Allow-Origin【英文标题】: 【发布时间】:2016-02-04 13:12:20 【问题描述】:

我使用loadFileURL: allowingReadAccessToURLios 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 上不起作用

iOS 9 WKWebView 产生“加载资源失败:已取消”,而 iOS 8 没有

清除WKWebView的缓存