Cordova升级 6.0后,ajax请求CORS跨域问题解决

最近Cordova版本发布6.0(已更新到6.1),移除了内部所有的UIWebView,替换为WKWebView
官方参考: Cordova 6.0升级参考

原因是苹果上线已经禁止了一切包含WebView的APP上线,所以目前对公司旧版Cordova进行了升级,目前遇到以下问题,如果遇到同样问题,可以参考

ajax请求CORS (跨域问题)

Xnip2020-08-11_15-31-50.jpg
Cordova3.jpg

升级后发现APP所有的请求都被拦截,无法请求,研究官网发现给出解释,因为IOS-WKWebView安全等级升级,所以造成了CORS问题,官方给出解决方法是在XML中配置以下代码,使你的项目成为自定义方案:



但是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问题解决办法,如理解不对,欢迎指正,如果谁有更好的解决办法,麻烦请告知,谢谢

你可能感兴趣的:(Cordova升级 6.0后,ajax请求CORS跨域问题解决)