Access-Control-Allow-Origin不允许WKWebview Origin null

时间:2016-09-07 05:25:48

标签: ios wkwebview

我正在研究混合ios应用程序,我正在尝试使用wkwebview而不是uiwebview,因为在wkwebview中他们通过uiwebview修复了许多性能问题,并且如果我正在进行任何ajax请求,wkwebview中的加载速度也会增加从支持文件,我得到的原因是Access-Control-Allow-Origin

不允许使用null

代码:

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html"];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[webView loadHTMLString:htmlString baseURL: [[NSBundle mainBundle] bundleURL]];

5 个答案:

答案 0 :(得分:1)

取自cordova-ios

<块引用>

在 CordovaLib/Classes/Private/Plugins/CDVWebViewEngine/CDVWebViewEngine.m 在 WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init] 之后; 添加以下内容:[configuration setValue:@"TRUE" forKey:@"allowUniversalAccessFromFileURLs"];

答案 1 :(得分:0)

很快就可以做到这一点,但我确定obj c等效项是相同的

webView.loadFileURL(urlIndex, allowingReadAccessTo: urlDir)

还可以设置以下内容-尽管我没有看到正式记录下来,并且为我解决了CORS错误,但人们似乎声称它已在appstore中被接受:

webView.configuration.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs")

答案 2 :(得分:0)

下一个代码为我解决了这个问题。

func loadWKWebview(){
   let configs = WKWebViewConfiguration()
   configs.setValue(true, forKey: "_allowUniversalAccessFromFileURLs")
   let webView = WKWebView(frame: view.bounds, configuration: configs)
   self.view.addSubview(webView)

   let request = URLRequest(url: Bundle.main.url(forResource: "hello", withExtension: "html")!)

   webView.load(request)
}

请注意,必须在WKWebView实例化之前优先完成配置设置

答案 3 :(得分:0)

答案与其他类似,但是从科尔多瓦的角度来看,此处发布的功能并没有敲响钟声,这就是我们来到这里的原因。

潜在的问题是WKWebview希望本地文件也尊重CORS,基本上,您需要告诉它忽略这些文件。

使用Cordova,您可以通过添加以下内容来解决此问题:

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

到生成的iOS项目中的CDVWebViewEngine.m文件中的createConfigurationFromSettings方法(通常在CordovaLib.xcodeproj / Private / CDVWebViewEngine / Plugins下)

有人创建了一个插件来添加以下内容: https://github.com/TheMattRay/cordova-plugin-wkwebviewxhrfix

但是,这给我们带来了编译问题(易于修复,但是还需要手动操作。),因此,我们目前仅将自己的两行内容添加到CDVWebViewEngine.m文件中(将iOS添加为平台会删除再行,仅执行“ cordova build ios”就不会)。

答案 4 :(得分:-1)

问题的根源在于使用[[NSBundle mainBundle] bundleURL]作为基本网址。此URL用于HTML页面的原始策略检查。尝试使用nil作为基本网址。

请注意,将nil作为基本网址传递是不安全的,因此如果您关心安全性,则应使用[NSURL URLWithString:@“about:blank”]之类的内容。