loadFileURL: allowingReadAccessToURL
を使用してIOS WKWebview
にローカルhtmlファイルをロードします。しかし、ajaxリクエストを送信すると失敗します。
エラーは次のとおりです。
Origin nullは、Access-Control-Allow-Originでは許可されていません。
Androidのように、このエラーを修正するためにいくつかのプロパティを設定できますか?setAllowUniversalAccessFromFileURLs
を使用できますか?
このように設定してみましたか?
let config = WKWebViewConfiguration()
config.setValue(true, forKey: "allowUniversalAccessFromFileURLs")
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)
LoadFileURLの代わりにloadRequestを使用してみてください。それは私のために働いた:
NSString* path = [[NSBundle mainBundle] pathForResource:@"pageName" ofType:@"html"];
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]];
[self.webView loadRequest:request];
その後、以前に「nullからリクエストを送信できません」というエラーが発生したときにクエリが正常に機能しました。
以下の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://」として渡されます
Chromeでは、適切なCORSヘッダーがあるにもかかわらず、ローカルホストからのCORSリクエストは機能しません。