[Cordova] App 在 iPhone 上出現 Origin null is not allowed by Access-Control-Allow-Origin 錯誤,無法連網
2021/10/31 備註:本篇內容可能已無效,
請改參考 [Cordova] 用 cordova-plugin-ios-xhr 外掛解決 Origin null is not allowed 這篇。
最近打開自己寫的圖書館多重帳戶 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
3 thoughts on “[Cordova] App 在 iPhone 上出現 Origin null is not allowed by Access-Control-Allow-Origin 錯誤,無法連網”
您好,想跟您請教一下,針對後續IOS系統更新後,怎麼去存取遠端網址的 Session 和 Cookie 呢? 這個問題一直困擾很久。不知道可否有比較好的處理方式呢?
方法有找到了,在此做個分享,安裝這個套件然後指定目標的網址,問題就解決了,能順利抓到 Session 和 Cookie。
https://github.com/CWBudde/cordova-plugin-wkwebview-inject-cookie
指定方式:
wkWebView.injectCookie(‘http://網址/’);
感謝您的分享喔 ^^/