PhoneGap Android 从 3.7.0 到 4.0.2 跨域 XHR 404

发布时间: 2017/3/17 3:47:26
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有 Android application 以下 config.xml :

<access origin="*" />

于是,我开始对 API 端点的请求使用角 $http 像这样︰

$http({
  data: this._createTokenRequest(tenant, username, password),
  method: 'POST',
  headers: { Accept: 'application/json', 'Content-Type': 'application/json' },
  timeout: 10000,
  url: url + '/api/RequestToken'
}).catch(err => {
  alert(err.message || err);
  alert(JSON.stringify(err));
}).then(response => {
  alert(response);
});

3.7.0 响应 handler 将会被调用。自从升级到 4.0.2 (使用 PhoneGap Build 设置 <preference name="phonegap-version" value="cli-5.1.1" /> 作为根据http://phonegap.com/blog/2015/06/16/phonegap-updated-on-build/)、 catch 调用 404 Not Found 错误。

是什么导致这?我看到没有更新日志 (https://github.com/apache/cordova-android/blob/4.0.2/RELEASENOTES.md) 中的有关条目。

解决方法 1:

当你 switchcli-5.1.1 ,你将 switch4.0.x 版本的 Android 。正如 @laughingpine 在评论中指出,白名单机制已被更改。早些时候,你可以使用 <access origin="*" /> 来获得对所有域的访问。这已不再适用。

现在,您需要 cordova-plugin-whitelist (https://github.com/apache/cordova-plugin-whitelist)。请参阅文档中的细节。大致相当于早些时候的通配符是 <allow-navigation href="*" /> ,这是新的机制。

build 下 PhoneGap Build (因此规定称为 PGB),您将需要添加插件。因为该插件是可用下 npm (节点软件包管理器),你可以找到最新的版本下 cordova-plugin-whitelist (https://www.npmjs.com/package/cordova-plugin-whitelist) 的名字。PGB 可以 build 插件从 npm 与以下符号︰

<gap:plugin name="cordova-plugin-whitelist" version="1.0.0" source="npm" />

现在 PGB 将 build 正确和白名单一如既往地工作。

赞助商