Cordova 应用无法在 First 运行 中发出 CORS 请求

Cordova app can't make CORS request in First Run

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

背景

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

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 上进行了此配置(在其中一个应用程序上):

    <access origin="*" />
    <allow-navigation href="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />

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

我怀疑问题出在 android 本身或 cordova-plugin-whitelist 中,但请记住:它是从零开始的,没有对代码存储库或新构建进行任何更改 - 这让我发疯。

谁能给我一盏灯?

谢谢!

我们公司也遇到了同样的问题。仔细研究,我们发现了这个 Chromium 错误,该错误已合并到 77:

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

如果您是 运行 Chromium 76,这可能是您遇到问题的根源。遗憾的是,我们无法修复它。