我正在研究混合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]];
答案 0 :(得分:1)
在 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”]
之类的内容。