在iOS上模拟离子应用程序时出现CORS

时间:2017-09-10 19:46:34

标签: cordova ionic3 ionic-cli

我最近更新了ionic-cli,现在我正尝试使用ionic cordova emulate ios命令模拟离子应用。

但是,每次api请求都会出现CORS错误

  

Access-Control-Allow-Origin不允许原点http://localhost:8080

我发现ionic docs对上述命令

说了这个
  

与直接运行cordova模拟一样,但也会监视Web资产的变化,并使用--livereload选项提供实时重新加载功能。

似乎该命令也会启动一个服务器,这可以解释为什么原点是localhost而不是file://

但是,我尝试使用cordova emulate ios进行模拟,或者使用ionic cordova build ios构建应用程序并使用模拟器运行输出,但我仍然遇到CORS错误。

在Android上模拟效果很好,并且有一个代理可以在浏览器中运行该应用程序。

任何想法我是否走在正确的轨道上,是否有办法从file://模仿?将应用程序发布到App Store时,此问题是否仍然存在?

2 个答案:

答案 0 :(得分:1)

iOS上的CORS问题实际上并非来自ionic-cli,而是来自WKWebView使用UIWebview的事实。

This blog post解释了有关WKWebView的更多信息,以及它为什么比它的前任更好。

它还提到了有关CORS的内容:

  

UIWebview或iOS中较旧的webview从未实际强制执行CORS,但WKWebView确实并没有提供禁用它的方法。要解决此问题,您需要正确实现CORS并添加以下条目:

     

原产地:http://localhost:8080

     

如果这不可能(您不拥有API),解决方法可以是使用本机HTTP插件,@ ionic-native / http。

所以我在api上启用了CORS,一切都和以前一样。

答案 1 :(得分:0)

尝试创建离子代理,将此代码添加到ionic.config.json

"proxies": [{
    "path": "/api",
    "proxyUrl": "http://your-server.com"
}]

然后使用http.get('/api')

简单地呼叫您的服务器

如果仍然无效,请尝试使用cordova http插件而不是使用angular http。