无论我做什么,PhoneGap都不想使用REST服务

时间:2016-04-20 00:01:38

标签: angularjs cordova phonegap-cli

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

$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 -->

我需要改变什么?几天来一直在捣乱这个bug,而且在我的空闲时间里无法真正创建新的酷炫功能有点烦人。

编辑:我正在使用phonegap serve为该应用提供服务,并使用PhoneGap开发者应用进行测试。

1 个答案:

答案 0 :(得分: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")

网上有一些资源: