美文网首页
Cordova升级 6.0后,ajax请求CORS跨域问题解决

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

作者: 路过你的全部 | 来源:发表于2020-08-11 15:00 被阅读0次

    最近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中配置以下代码,使你的项目成为自定义方案:

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/lnvedktx.html