web-dev-qa-db-ja.com

IOS9 WKWebView Access-Control-Allow-Origin

loadFileURL: allowingReadAccessToURLを使用してIOS WKWebviewにローカルhtmlファイルをロードします。しかし、ajaxリクエストを送信すると失敗します。

エラーは次のとおりです。

Origin nullは、Access-Control-Allow-Originでは許可されていません。

Androidのように、このエラーを修正するためにいくつかのプロパティを設定できますか?setAllowUniversalAccessFromFileURLsを使用できますか?

34
Haoru Zhan

このように設定してみましたか?

let config = WKWebViewConfiguration()
config.setValue(true, forKey: "allowUniversalAccessFromFileURLs")
2
cmilhench

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)

0
Janibyek

LoadFileURLの代わりにloadRequestを使用してみてください。それは私のために働いた:

NSString* path = [[NSBundle mainBundle] pathForResource:@"pageName" ofType:@"html"];
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]];
[self.webView loadRequest:request];

その後、以前に「nullからリクエストを送信できません」というエラーが発生したときにクエリが正常に機能しました。

0
CedricSoubrie

以下のWkWebViewを使用してHTMLをローカルにロードすると(ファイルURL)、WkWebViewへの構成設定が機能しました

WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
WKUserContentController *userContentController = [[WKUserContentController alloc] init];

[theConfiguration.preferences setValue:@"TRUE" forKey:@"allowFileAccessFromFileURLs"];
[theConfiguration setValue:@"TRUE" forKey:@"allowUniversalAccessFromFileURLs"];

上記の設定を行うと、Originはnullではなく「file://」として渡されます

0
Girish Adiga

Chromeでは、適切なCORSヘッダーがあるにもかかわらず、ローカルホストからのCORSリクエストは機能しません。

0
Pedro Rodrigues