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,这可能是您遇到问题的根源。遗憾的是,我们无法修复它。
我从昨天开始就遇到了 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,这可能是您遇到问题的根源。遗憾的是,我们无法修复它。