
[Cordova] App 在 iPhone 上出現 Origin null is not allowed by Access-Control-Allow-Origin 錯誤,無法連網
最近打開自己寫的圖書館多重帳戶 iOS 版,
想要修正一些問題,卻發現 app 似乎無法連上網路:
用 Safari 開發者工具找出 Cordova app 裡的 JavaScript 錯誤 這篇的方法,
先編譯好除錯版本用的 app,再用 Safari 連上 app,
這時在 Safari 的開發者工具 Console 視窗裡,
看到有許多的錯誤,主要就是 Origin null is not allowed by Access-Control-Allow-Origin,
導致 HTTP 連線直接被拒絕:
上網查了一下,似乎是 Cordova app裡,
iOS 平台上的 WKWebView 元件,會把來源 (origin) 設成 null,
所以會導致 跨來源資源共用(CORS – Cross-Origin Resource Sharing) 被阻擋~
解決的方法,是安裝類似 Raphcal/cordova-plugin-cors 這類的 Cordova 外掛,
(其他查到的還有像 globules-io/cordova-plugin-ios-xhr,但不太記得試驗結果)
cordova plugin add cordova-plugin-cors
安裝好後,重新編譯 Cordova app,
那些 Origin null is not allowed by Access-Control-Allow-Origin 的錯誤訊息就消失了,
App 也可以連上網路了~
PS: 不過有發現另一個問題,WKWebView 元件在新版的 iOS 上,
它的 Session cookie 似乎沒辦法在頁面與 Ajax 連線間共用,
以前我在 App 裡用 Ajax 登入了圖書館網站,
然後在 App 裡的 web view 元件開啟圖書館網站,會是已經登入的狀態。
但現在就會是未登入的狀態,也就是說 Ajax 的 session cookie 沒有與 web view 元件共享。
但這應該算是另一個問題,與 Origin null 或 CORS 應該不相干囉…
參考資料:
- Cordova iOS “Origin null is not allowed by Access-Control-Allow-Origin” on local files – Stack Overflow
- Issue with Cookie · Issue #753 · apache/cordova-plugin-inappbrowser · GitHub