Cordova应用无法在首次运行时发出CORS请求

时间:2019-08-08 14:58:28

标签: android cordova cordova-plugins

从昨天开始,我在Cordova和(也许是?)cordova-plugin-whitelist上遇到问题,无法找到解决方案,因此,我在这里寻求您的帮助。我会尽力解释一切。

背景

我在一家IT公司工作,我们使用Cordova Platform开发了一些应用程序。昨天,我在设备上安装了一个应用程序,并出现以下错误:

Access to XMLHttpRequest at 'http://valid-url/' from origin 'file://' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Uncaught (in promise) Error: Request has been terminated
Possible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.
    at Request.push../node_modules/superagent/lib/client.js.Request.crossDomainError (client.js:621)
    at XMLHttpRequest.xhr.onreadystatechange (client.js:705)

此错误不允许我向服务器提出请求。但这是一个奇怪的事情:这只是在我第一次启动应用程序时或当我删除数据库时发生;如果我关闭该应用程序并重新启动,它就可以正常工作。另一个奇怪的事情是:这发生在我们所有的应用程序中,而其中的一些应用程序没有得到新的补丁或几个月内没有任何变化,所以...怎么可能呢?我虽然要对Chromium进行更改,但是设备上的版本比实际版本要旧。

我知道我需要cordova-plugin-whitelist发出请求,我已经将它安装在 1.3.4 版本上,并且在config.xml上具有此配置(在一个应用程序上) :

# The map here can come from other supported configurations
# like locals, resource attribute, map() built-in, etc.
variable "example" {
  default = {
    #HERE YOU DEFINE YOUR MAP
    rds_password= "${random_string.rds_password.result}"

  }

  type = "map"
}

resource "aws_secretsmanager_secret_version" "example" {
  secret_id     = "${aws_secretsmanager_secret.example.id}"
  # HERE YOU INJECT THE KEY/VAL
  secret_string = "${jsonencode(var.example)}"
}

我当前的 cordova-android 版本是7.0.0-我已经尝试将cordova-android和插件白名单分别降级为6.4.0和1.3.3,但是没有用。

我怀疑问题出在Android本身或cordova-plugin-whitelist,但请记住:它从零开始,没有代码库或新版本的任何更改-这让我发疯。

有人可以给我个灯吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我们公司遇到同样的问题。调查发现,我们发现了这个Chromium错误,该错误已合并到77中:

https://bugs.chromium.org/p/chromium/issues/detail?id=991107

如果您正在运行Chromium 76,则可能是造成麻烦的原因。可悲的是,这对我们来说是无法修复的。