【问题标题】:Ajax call fails with HTTP status 0 when using Cordova WKWebView plugin on iOS在 iOS 上使用 Cordova WKWebView 插件时,Ajax 调用失败,HTTP 状态为 0
【发布时间】:2016-03-20 02:39:57
【问题描述】:

我一直在尝试更新我的 Cordova iOS 应用程序以使用新的 WKWebView 可插入 Web 视图,但我遇到了安装时无法进行 ajax 调用的问题。当我尝试进行以下调用时,我收到 HTTP 状态 0 的错误结果:

return Promise.resolve($.ajax({
        url: 'https://mytestserver.com/settings',
        timeout: 10000 
    }))

我在 iOS 平台 4.0.0 上使用 Cordova 5.4.1,我的测试设备正在运行 iOS 9.2。一旦我删除 WKWebView 插件并且 Cordova 恢复为 UIWebView,此代码就会按预期工作。我尝试过使用和不使用白名单插件 (1.2.0)。

我的 config.xml 包括:

<access origin="*" />

我的 index.html CSP 标签是:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: cdvfile: https://ssl.gstatic.com 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *; img-src *; connect-src https: blob: 'self'; object-src 'self' blob:;">

【问题讨论】:

  • 你申请苹果的ATS了吗?您的 Javascript 在 index.html 页面中吗?还是您所有的 Javascript 都在它自己的文件中?这严格来说是iOS 问题吗?

标签: ios ajax cordova uiwebview wkwebview


【解决方案1】:

您阅读过文档的Limitations 部分吗?

如果您从 UIWebView 升级,请注意 our issue tracker 中概述的使用 WKWebView 的限制。

我认为你的问题是WKWebView is affected by CORS

所以你必须在服务器上设置Access-Control-Allow-Origin: *

Examples

【讨论】:

  • 这后来证明是我的问题。我确实在我的服务器上设置了 CORS 标头,但是在两个地方,所以服务器发送 two Access-Control-Allow-Origin 标头,这违反了规范。
  • 确认这是在 iOS 9.3.2 上运行的 Telerik WKWebView 0.6.9 和 Cordova 4.0.0 (iOS 3.8.0) 的解决方案
  • 如何以及在哪里将它添加到我的服务器上?
  • 示例链接 (enable-cors.org/server.html) 解释了如何根据您使用的服务器,它们有很多,每个都不同。
【解决方案2】:

在 index.html 中,ajax 可以正常工作,但在其他 html 文件中却没有,所以我不得不使用像母版页这样的索引来修改应用程序和应用程序工作的另一个文件。

【讨论】:

    猜你喜欢
    • 2015-12-01
    • 2017-08-27
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    相关资源
    最近更新 更多