【问题标题】:Ajax requests fail after upgrading to Cordova 5.0 + cordova-android@4.0升级到 Cordova 5.0 + cordova-android@4.0 后 Ajax 请求失败
【发布时间】: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 拒绝请求的原因的更多信息?

【问题讨论】:

    标签: android ajax 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】:

      两件事

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

      阅读

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

          【讨论】:

            猜你喜欢
            • 2021-12-19
            • 1970-01-01
            • 2013-08-09
            • 2020-04-20
            • 2022-08-19
            • 1970-01-01
            • 2015-08-07
            • 2017-06-11
            • 1970-01-01
            相关资源
            最近更新 更多