升级到 Cordova 5.0 + cordova-android@4.0 后 Ajax 请求失败

Posted

技术标签:

【中文标题】升级到 Cordova 5.0 + cordova-android@4.0 后 Ajax 请求失败【英文标题】:Ajax requests fail after upgrading to Cordova 5.0 + cordova-android@4.0 【发布时间】:2015-05-05 18:25:20 【问题描述】:

我最近升级到了 Cordova 5.0(和 Cordova android 4.0),从那以后,我的应用无法再访问外部资源。

我在 config.xml 中仍然有 <access origin="*" />(和以前一样),我在 AndroidManifest.xml 中仍然有 <uses-permission android:name="android.permission.INTERNET" />(和以前一样),但是 ajax 调用被拒绝而没有任何解释(“textStatus”参数是“ error”,“errorThrown”参数为空,xhr.state() 返回“rejected”)。

我已经验证没有请求到达服务器,所以它似乎被 Android 停止了,但是日志没有给出任何解释为什么......

我可以从 Android 浏览器访问相关 URL,但不能从应用程序访问。

ajax 请求是通过调用Backbone.js 的Backbone.sync() 发出的,最终调用jquery 的$.ajax()。我没有改变任何关于如何拨打电话...只是升级了cordova。

在 Cordova 5.0 中是否有新的网络请求要求/设置,或者我需要做的与以前的 Cordova 版本不同的事情?

有没有人知道我可以通过什么方式获得有关 Android 和/或 Cordova 拒绝请求的原因的更多信息?

【问题讨论】:

【参考方案1】:

我追踪到了 android@4.0.0 cordova 平台的罪魁祸首。它现在需要新的cordova-plugin-whitelist 插件。

可以安装

cordova plugin add cordova-plugin-whitelist

或添加

<plugin name="cordova-plugin-whitelist" spec="1" />

到config.xml,然后配置

<allow-navigation href="*" />

代替旧的&lt;access origin="*" /&gt; 标签。

当这样的问题出现时,日志不再显示“白名单拒绝”错误消息,这有点烦人(这本来可以为我节省很多时间),但也许以后会出现。

【讨论】:

非常感谢。拯救了我的一天。 这仅在我重新创建模拟器时才对我有用 谢谢。像魅力一样工作。在 Cordova 5.3.3 上测试,没有更改任何代码。 这个答案不完整。如果这对您不起作用,请阅读IF External links do not open 那么摆脱访问来源?【参考方案2】:

在 Cordova 6.X 中,您需要删除内置的白名单插件并重新安装新版本的插件。

cordova plugin remove cordova-plugin-whitelist

然后重新安装插件

cordova plugin add cordova-plugin-whitelist

然后将&lt;allow-navigation href="*" /&gt;替换为config.xml文件而不是&lt;access origin="*" /&gt; 就我而言,这个技巧奏效了。

【讨论】:

【参考方案3】:

两件事

    确保您使用的 ajax url 允许跨源请求 您是否在进行跨源请求时传递了相关标头

阅读

http://enable-cors.org/

How to enable CORS in AngularJs

http://backbonetutorials.com/cross-domain-sessions/

【讨论】:

【参考方案4】:

如果你使用的是cordova 6.x.x,你需要卸载内置的cordova-plugin-whitelist

cordova 插件删除 cordova-plugin-whitelist

并使用

重新安装它

cordova插件添加cordova-plugin-whitelist

即使问题仍然存在,请重新启动命令提示符并尝试。

【讨论】:

【参考方案5】:

对我来说,在我从 html 文件的 mata 标记中删除后,它就开始工作了:

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

【讨论】:

以上是关于升级到 Cordova 5.0 + cordova-android@4.0 后 Ajax 请求失败的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 3.5 deviceready 事件在 5 秒后未触发

Cordova“hidekeyboard”事件在 Cordova 5.0 中不起作用

Android Cordova 5.0+ 相机崩溃

将 cordova 1.9.0 (iOS) 升级到 cordova 2.1.0 并更新现有项目以使用 2.1.0

无法在 Phonegap / Cordova 3.5.0-0.2.4 上运行联系人插件

升级科尔多瓦应用程序时出错