PhoneGap Android从3.7.0到4.0.2跨域XHR 404's

Roe*_*den 4 android angularjs cordova phonegap-build

我有一个Android应用程序,其中包含以下内容config.xml:

<access origin="*" />
Run Code Online (Sandbox Code Playgroud)

然后,我使用Angular开始向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);
});
Run Code Online (Sandbox Code Playgroud)

3.7.0响应处理程序中将被调用.自升级到4.0.2(<preference name="phonegap-version" value="cli-5.1.1" />根据http://phonegap.com/blog/2015/06/16/phonegap-updated-on-build/使用PhoneGap Build设置)时,将catch调用该404 Not Found错误.

可能是什么导致了这个?我在更改日志中看不到相关条目(https://github.com/apache/cordova-android/blob/4.0.2/RELEASENOTES.md).

Roe*_*den 7

切换到时cli-5.1.1,您将切换到4.0.xAndroid版本.正如@laughingpine在评论中指出的那样,白名单机制已经改变.之前,您可以使用它<access origin="*" />来获取对所有域的访问权限.这不再适用.

现在你需要cordova-plugin-whitelist(https://github.com/apache/cordova-plugin-whitelist).有关详细信息,请参阅文档.早期通配符的粗略等价物<allow-navigation href="*" />是新机制.

要在PhoneGap Build下构建(因此称为PGB),您需要添加插件.由于插件位于npm(节点包管理器)下,因此您可以在cordova-plugin-whitelist名称(https://www.npmjs.com/package/cordova-plugin-whitelist)下找到最新版本.PGB可以npm使用以下表示法构建插件:

<gap:plugin name="cordova-plugin-whitelist" version="1.0.0" source="npm" />
Run Code Online (Sandbox Code Playgroud)

现在PGB将正确构建,您的白名单将像以前一样工作.