0

我有一个使用 AngularJS 的 PhoneGap 应用程序。我正在对我的 Node 后端使用一个非常简单的 $http 调用:

$http.get("http://localhost:6969/random")
   .then(function(response) {
        $scope.images = response.data;
  });

无论如何,PhoneGap 永远不会打到后端。我已经在普通浏览器中对其进行了测试,并且可以按预期工作。

我显然已经阅读了很多关于它的内容,并且大多数人使用白名单来修复它,但是在我的 中config.xml,我的白名单几乎是尽可能开放的:

<plugin name="cordova-plugin-whitelist" source="npm" spec="1.1.0" />
  <allow-navigation href="*" subdomains="true" />
  <allow-intent href="*" subdomains="true"/>
  <access origin="*" subdomains="true"/> <!-- Required for iOS9 -->

我必须改变什么?断断续续地与这个错误搏斗了几天,在我的空闲时间无法真正创建新的酷功能有点烦人。

编辑:我正在phonegap serve使用PhoneGap Developer App 为该应用程序提供服务并对其进行测试。

4

1 回答 1

1

我建议您的内容安全策略可能需要修改以包含一个 connect-src 子句来指定 Ajax 请求可以到达的位置。

获取您在评论中发布的 CSP 元标记:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'" />

我建议修改它以向任何地方开放 Ajax 请求,看看这是否有帮助,然后将其控制在您想要支持的域中。

建议的 CSP 将是:

<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 *">

如果这可行,并且您想稍后锁定到一个域,那么您需要类似的东西:

<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://api.mydomain.com">

此外,我认为您需要更改应用程序的代码以通过主机名或 IP 地址连接到您的服务器,以便在设备上它不会将“localhost”与设备本身混淆,并尝试连接到端口 6969设备。

所以:

$http.get("http://localhost:6969/random")

可能需要变成:

$http.get("http://myhost.mydomain.com:6969/random")

或者

$http.get("http://xxx.xxx.xxx.xxx:6969/random")

网上有一些资源:

于 2016-04-20T01:07:47.903 回答