最近Cordova版本发布6.0(已更新到6.1),移除了内部所有的UIWebView,替换为WKWebView
官方参考: Cordova 6.0升级参考
原因是苹果上线已经禁止了一切包含WebView的APP上线,所以目前对公司旧版Cordova进行了升级,目前遇到以下问题,如果遇到同样问题,可以参考
ajax请求CORS (跨域问题)
![](https://img.haomeiwen.com/i3429174/a07d33060db38551.jpg)
![](https://img.haomeiwen.com/i3429174/e86fb8275fa4c35d.jpg)
升级后发现APP所有的请求都被拦截,无法请求,研究官网发现给出解释,因为IOS-WKWebView安全等级升级,所以造成了CORS问题,官方给出解决方法是在XML中配置以下代码,使你的项目成为自定义方案:
<preference name="scheme" value="app" />
<preference name="hostname" value="localhost" />
但是Cordva又在后来更新中提到,使用上面的配置变成自定义方案会使得你的项目无法使用 web storage 本地存储, 具体请参考官方更新:CordovaUpdate说明,另外,上文更新说明中,还提到了关于CORS问题的一个博客说明,具体参考 CORS问题解释说明。
目前上面的方法我都有尝试,配置了服务器端的接受任何跨域请求,当然最后是没有成功,因为最后排查发现,我的请求就没发出去,根本就没到达服务端。
目前解决方案:
研究过程中发现了之前关于 cordova-plugin-wkwebview-engine (WK插件)CORS的一种
WK解决方法,但Cordova6.0后,WK插件就被移除了,兼容到Cordova内部中,所以我在升级后的Cordva中同样搜索 createConfigurationFromSettings 方法,在其内部增加代码,然后就生效解决了:
升级Cordova6.0之后,在Xcode中全局搜索此方法,新版Cordova存在 于
Private---->plugins---CDVWebViewEngine 文件中,在方法中增添最后两句代码即可,打开WKWebview的访问配置:
- (WKWebViewConfiguration*) createConfigurationFromSettings:(NSDictionary*)settings
{
WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];
...
这里还有一部分代码,不用删除
...
//在return上面添加下面两行代码
[configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
[configuration setValue:@YES forKey:@"_allowUniversalAccessFromFileURLs"];
return configuration;
}
解决跨域问题,Cookie获取不到的情况。
这是我目前针对Cordova 6.0 之后遇到的CORS问题解决办法,如理解不对,欢迎指正,如果谁有更好的解决办法,麻烦请告知,谢谢
网友评论