2015-10-14 70 views
6

我正在使用Cordova封裝的JavaScript應用程序,並使用Phonegap Build構建。我們在我們的版本中包含了來自npm的cordova-plugin-whitelist,並且在我們的config.xml中添加了<access origin="*" />,並在我們的index.html中添加了一個開放的CSP(<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">)。該應用在Android上運行良好,並且與我們的服務器交談時沒有問題,但在iOS上,所有請求都會立即失敗,就好像白名單插件不會讓流量通過一樣。cordova-plugin-whitelist在Android上工作但不支持iOS(Phonegap Build)

我已經嘗試了一些不同的構建配置,以防萬一某種特定版本的科爾多瓦爆發,但一直沒有能夠得到這個工作。過去我曾遇到與其他Phonegap/Cordova應用類似的問題,但能夠使用白名單插件/ CSP /訪問規則解決此問題。

由於Safari開發人員工具無法連接到iOS設備,因此此問題也很難調試,因此我不得不提醒我看到的響應。它看起來像返回的響應有一個狀態碼0和一個空的身體,我假設只是意味着無法訪問。

回答

4

您可能需要設置您的內容安全,政策的Connect-SRC,例如:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src http://YOUR_HOST"> 

此外,對於Xcode的7/iOS版9,你將需要調整ATS設置,以允許連接非HTTPS後端,如果你沒有使用SSL:

這裏的變化,以您的應用程序的信息的.plist的工作示例:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
</dict> 

(請注意,您也可以這樣來配置有選擇地允許非https連接)。

而且這裏有一個腳本,你可以作爲預編譯鉤使用的iOS自動做到這一點:

#!/bin/bash 
echo "Adjusting plist for App Transport Security exception." 
val=$(/usr/libexec/plistbuddy -c "add NSAppTransportSecurity:NSAllowsArbitraryLoads bool true" platforms/ios/PROJECTNAME/PROJECTNAME-Info.plist 2>/dev/null) echo "Done" 

剛換出PROJECTNAME爲您的項目的名稱。

+1

另外,它看起來像[此代碼(https://github.com/apache/cordova-plugin-whitelist/blob/r1.1.0/src/ios/CDVNavigationWhitelistPlugin.m#L85-L88)(具有標記版本1.1.0)最近在9天前在[提交](https://github.com/apache/cordova-plugin-whitelist/commit/9c2693b4ff6d98f859cbadddc9df683c508ae4a2#diff-58fc34aceb04ed0fc9c1c444fb50033fR102)中重命名/更改。也許試試'1.1.0-dev'版本? – broinjc

+0

https://www.npmjs.com/package/cordova-plugin-whitelist最新版本是6個月大(v1.0.0) – broinjc

+0

哈哈 - https://www.npmjs.com/package/cordova-plugin-whitelist-開發 – broinjc

相關問題