【问题标题】:Ajax calls fail when running Android Cordova app in Release mode在发布模式下运行 Android Cordova 应用程序时,Ajax 调用失败
【发布时间】:2016-06-13 07:46:44
【问题描述】:

在 Android 上以发布模式运行应用程序时,AJAX 调用失败(适用于 iOS)。这是我在 Chrome 开发工具中看到的错误(确实是警告):

显示临时标题

Request URL:https://server.com/api/index.php?ticket=ST-111111-ABCDEFG-cas

Request Headers
Provisional headers are shown
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Origin:file://
User-Agent:Mozilla/5.0 (Linux; Android 6.0; Google Nexus 5 - 6.0.0 - API 23 - 1080x1920 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.0.0 Mobile Safari/537.36
Query String Parametersview sourceview URL encoded
ticket:ST-111111-ABCDEFG-cas

Form Dataview sourceview URL encoded
request:{"param1":"val1","param2":"val2"}

在调试模式下一切正常。 我去年发布的 Android 版本仍然运行良好。所以可能和新版Cordova有关。 这是我拥有的工具版本:

  • 节点版本:v4.4.3
  • Cordova 版本:6.2.0
  • cordova-android@5.1.1
  • Android SDK 已更新

我确实在 config.xml 中设置了这些设置:

<allow-navigation href="*" />
<access origin="*" />
<allow-intent href="*" />

我正在使用白名单插件:

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

我还在 index.html 文件中设置了这个元数据:

<meta http-equiv="Content-Security-Policy" content="default-src *; img-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

还有其他我忘记设置的 Cordova 设置吗?

仅供参考,我已将 Android 平台删除并重新添加到我的项目中,更新了我的所有插件,但我仍然遇到相同的 Ajax 错误。

请帮忙。

【问题讨论】:

  • 您现在有解决方案吗?我有同样的问题,不确定是否是 SSL 问题。它只发生在某些设备上,例如 moto x。
  • 是的,这是一个 SSL 问题。 HTTPS 证书未被 Android 最新版本完全信任。使用更强大的加密重新生成证书后,该应用程序将再次在 Android 上运行。

标签: javascript android ajax cordova release


【解决方案1】:

遇到了完全相同的问题。 $.ajax 在调试版本上运行良好。发布版本失败,状态码为 0。 问题是一周的 SSL 证书。我将https更改为http,然后它也可以在发布中使用。见:

https://forum.ionicframework.com/t/cordova-plugin-whitelist-problem-only-in-release/43705/3

【讨论】:

    【解决方案2】:

    从 API 端 api 开发者需要允许跨源头。

    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Headers: CUSTOM_HEADERS);
    header('Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS);
    

    另外,当请求来自cordova或使用ajax时,还有ajax请求两个调用: 第一次调用是选项,其中 api 仅返回允许的标头和方法 在那一秒之后是调用 api 的实际 api 调用。

    【讨论】:

    • 还是不行。该请求甚至没有到达服务器。还有为什么它在 iOS 上运行而不在 Android 上运行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多