2017-09-10 34 views
2

最近ionic-cliが更新され、ionic cordova emulate iosというコマンドでイオンアプリをエミュレートしようとしています。すべてのAPIがiOSでイオンアプリをエミュレートするときにCORSの問題が発生する

起源http://localhost:8080がアクセス制御 - 許可 - 起源によって許可されていない要求で

しかし、私は、CORSのエラーを取得しています。私はionic docsはコルドバを実行するのと同じように

上記のコマンドについてはこれを言うことがわかっ

は直接エミュレートするだけでなく、ウェブ資産の変更を監視し、--livereloadオプションでライブリロード機能を提供します。それは、そのコマンドのように思える

も起源はlocalhost代わりのfile://である理由を説明するだろうサーバーを、開始します。

しかし、cordova emulate iosでエミュレートしたり、ionic cordova build iosでアプリをビルドしてシミュレータで出力を実行しましたが、CORSエラーが発生します。

Androidでのエミュレートはうまく動作し、ブラウザでアプリを実行するためのプロキシがあります。

正しい軌道に乗っていて、エミュレートする方法があるかどうかは、file://かと思いますか? App Storeにアプリを公開するときにこの問題は解決しないでしょうか?

答えて

1

iOS上のCORSの問題は、実際にはionic-cliに由来していませんでしたが、WKWebViewUIWebviewに変更したことに由来します。

This blog postについては、WKWebViewの詳細と、以前のバージョンよりもはるかに優れている理由について説明します。

また、この関係CORS言及:

のUIWebView、またはiOSで古いのWebView、実際にCORSを強制しないが、WKWebViewはありませんし、それを無効にする方法を提供していませんでした。これが不可能な場合、回避策は、ネイティブHTTPを使用することができます(あなたがAPIを所有していない)http://localhost:8080

原産地:これに対処するために、あなたは正しくCORSを実装し、次のエントリを追加する必要がありますプラグイン、@ ionic-native/http。

私はapiでCORSを有効にしていたので、以前と同じように動作しました。

+0

--consolelogsと--livereloadが有効になっていなくても、強制的に強制しますか? --consolelogsと--livereloadがアクティブにならない前に、要求が正しく機能しました – Hanzo

+0

いいえ、私は問題の原因について実際に間違っていました。私は最近「UIWebview」から「WKWebView」に切り替わり、「WKWebView」はCORSを強制しますが、前任者はそうしませんでした。 – emroussel

0

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

をionic.config.jsonし、それはまだ動作しない場合は、単にhttp.get('/api')

を使用してサーバーを呼び出すために、このコードを追加して、イオンプロキシを作成してみてください、コルドバHTTPプラグインを使用してみてください角のhttpの代わりに。

+0

答えていただきありがとうございますが、ブラウザでアプリを実行しているときに既にプロキシを設定しています。 ionic cliをアップデートする前に、iOS上でエミュレートされたときのアプリは 'file://'の原点を持ちましたが、原点は 'localhost'です。私はまた、App Store上のアプリケーションが生産とリリースのためのビルドがCORSの問題を作成するので同じ問題を抱えているのだろうかと思っています。 – emroussel

+0

私はthnik prodで問題を解決しませんが、angularjsのhttpクライアントの代わりにhttps://ionicframework.com/docs/native/http/を試してみてください。 – Marouan

+0

実際に私のapiでの認証に[authHttp](https://github.com/auth0/angular2-jwt)を使う必要がありますが、httpクライアントを変更すると、要求と同じヘッダー(同じオリジン)。 – emroussel