我最近升级到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拒绝请求的更多信息的方法?
答案 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)
答案 3 :(得分:0)
如果您使用的是cordova 6.x.x,则需要使用
卸载内置的cordova-plugin-whitelistcordova插件删除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 *">