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

CORS issues when emulating ionic app on iOS

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

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

Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin.

我发现 ionic docs 对上述命令有这样的说法

Like running cordova emulate directly, but also watches for changes in web assets and provides live-reload functionality with the --livereload option.

似乎该命令还启动了一个服务器,这可以解释为什么来源是 localhost 而不是 file://

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

在 Android 上模拟工作正常,并且在浏览器中有 运行 应用程序的代理。

知道我是否走在正确的轨道上,是否有方法可以效仿 file://?将应用发布到 App Store 时,此问题是否仍然存在?

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

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

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

调用你的服务器

如果仍然无法正常工作,请尝试使用 cordova http 插件而不是 angular http。

iOS 上的 CORS 问题实际上并非来自 ionic-cli,而是因为我从 UIWebview 切换到使用 WKWebView

This blog post 详细解释了 WKWebView 以及为什么它比它的前身好得多。

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

UIWebview, or the older webview in iOS, never actually enforced CORS, but WKWebView does and does not provide a way to disable it. To address this, you need to implement CORS correctly and add the following entry:

Origin: http://localhost:8080

IF this is not possible (you do not own the API), a workaround can be to use the native HTTP plugin, @ionic-native/http.

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