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

时间:2015-05-05 18:25:21

标签: android ajax cordova

我最近升级到Cordova 5.0(和Cordova Android 4.0),从那时起,我的应用程序无法再访问外部资源。

我仍然在config.xml中有<access origin="*" />(和以前一样),我在AndroidManifest.xml中仍然有<uses-permission android:name="android.permission.INTERNET" />(和以前一样),但是ajax调用被拒绝而没有解释(&# 34; textStatus&#34; param是&#34;错误&#34;,&#34; errorThrown&#34; param为null,xhr.state()返回&#34;拒绝&#34;)。

我已经确认没有请求到达服务器,因此它似乎被Android停止了,但是日志没有解释为什么......

我可以从Android浏览器访问有问题的网址,而不是从应用中访问。

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

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

有没有人知道我可以获得有关Android和/或Cordova拒绝请求的更多信息的方法?

5 个答案:

答案 0 :(得分:53)

我将罪魁祸首追溯到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="*" />

代替旧的<access origin="*" />代码。

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

答案 1 :(得分:3)

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

cordova plugin remove cordova-plugin-whitelist

并重新安装插件

cordova plugin add cordova-plugin-whitelist

然后将<allow-navigation href="*" />替换为config.xml文件而不是<access origin="*" /> 在我的情况下,这个技巧奏效了。

答案 2 :(得分:1)

两件事

  
      
  1. 确保您使用的ajax网址允许跨源请求
  2.   
  3. 您是否在提出跨源请求时传递相关标头
  4.   

阅读

http://enable-cors.org/

How to enable CORS in AngularJs

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

答案 3 :(得分:0)

如果您使用的是cordova 6.x.x,则需要使用

卸载内置的cordova-plugin-whitelist
  

cordova插件删除cordova-plugin-whitelist

并使用

重新安装
  

cordova插件添加cordova-plugin-whitelist

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

答案 4 :(得分:0)

对我来说,它从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 *">