Visual Studio 2015 Ajax 在 Apache Cordova Android 平台 6 中使用设备请求失败

Visual Studio 2015 Ajax Request fails using Device in Apache Cordova Android platform 6

Apache 团队,

我发布的这个问题,同时在 Vs 2015 的 TACO 中尝试有关 ajax 请求的所有可用资源失败。我将 API 与 localhost 一起使用,使用 localhost 的 IP 地址,尝试使用服务器托管 API,但当我将设备用于 Android 时,我总是得到状态 = 0。使用 Ripple Nexus 它可以工作 fine.I 我挣扎了一个星期但还没有运气。

我正在使用 VS 2015,Android 平台 6。

我也添加了白名单插件,并尝试添加所有类型的访问源:

<access origin="*" />

<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />

添加元标记:

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

Lollipop 对 Android 安全模型进行了一些更改。为了支持新模型,Cordova 5+ 引入了白名单插件和弃用的新安全模型 <access origin="*">。您的应用程序具有所有正确的部分,但您没有正确配置它们。

  1. 白名单插件
  2. 内容安全策略(元标记) 声明可以在客户端代码中访问哪些资源
  3. <allow-intent> 告诉 native/compiled 应用程序哪些来源可用于数据(例如 XHR)
  4. <allow-navigation> 告诉 native/compiled 应用哪些来源可用于内容(例如整页导航)

请注意,CSP 和 <allow-intent/navigation> 标签必须匹配。 CSP 由 Web 视图中的客户端代码使用。 <allow-intent/navigation> 标签由 native/compiled 应用包装器使用。

要允许对应用程序本身之外的域进行数据访问,您需要修改内容安全策略 (CSP) 以识别外部权限。有一个很棒的教程 available here, but I've provided an example below. This CSP allows XHR requests and content to be loaded from https://thecatapi.com(一个愚蠢的 API 那 returns 猫图像):

在index.html...

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

在config.xml...

<allow-intent href="https://thecatapi.com/*" />
<allow-navigation href="https://thecatapi.com/* />