2015-10-14 73 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

相关问题