Cordova 11登录页AJAX请求遇Access-Control-Allow-Origin跨域错误
解决Cordova 11 Android应用跨域请求失败问题
核查config.xml核心跨域配置
确保config.xml的规则覆盖两个请求域名,重点检查:
- 基础访问权限,可直接指定域名而非通配符(更严谨):
<access origin="https://手机号验证域名.com" /> <access origin="https://短信发送域名.com" /> - 添加WebView导航允许规则:
<allow-navigation href="https://手机号验证域名.com/*" /> <allow-navigation href="https://短信发送域名.com/*" /> - 若自定义了scheme和hostname,确认AJAX请求使用完整HTTPS域名,避免被解析为自定义协议(如
app://localhost):<preference name="scheme" value="app" /> <preference name="hostname" value="localhost" />
处理Chrome浏览器的CORS测试问题
Chrome浏览器的短信请求报CORS是浏览器同源策略限制导致,仅需在开发测试时绕过:
- 启动Chrome时添加参数关闭同源策略:
注:仅用于本地开发测试,正式环境无需此操作。chrome.exe --disable-web-security --user-data-dir="C:/ChromeDevSession"
排查移动端请求失败的具体原因
移动端手机号验证仅弹出“error”,需精准定位问题:
- 用
cordova-plugin-network-information插件检查设备网络状态:document.addEventListener("deviceready", () => { const networkState = navigator.connection.type; if (networkState === Connection.NONE) { alert('无网络连接'); } }, false); - 在AJAX请求中添加详细错误捕获,通过Chrome远程调试查看控制台日志:
可排查出DNS解析失败、证书不被信任、WebView安全策略限制等具体问题。$.ajax({ url: 'https://手机号验证域名.com/api/check-phone', method: 'POST', data: {phone: '13xxxxxxxxx'}, error: (xhr, status, error) => { console.log('请求状态:', status); console.log('错误详情:', error); console.log('响应内容:', xhr.responseText); } });
检查Android平台安全配置文件
重新添加Android平台后,自动生成的安全配置可能变化:
- 打开
res/xml/network_security_config.xml,添加允许访问的域名:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">手机号验证域名.com</domain> <domain includeSubdomains="true">短信发送域名.com</domain> </domain-config> </network-security-config> - 确认
AndroidManifest.xml中正确引用该配置:<application android:networkSecurityConfig="@xml/network_security_config">
重置Cordova平台与插件
若以上操作无效,尝试彻底重置环境:
- 移除Android平台:
cordova platform remove android - 清理项目缓存:
cordova clean - 重新指定版本添加Android平台:
cordova platform add android@11.0.0 - 重新安装所有依赖插件:
cordova plugin add 你的插件列表
内容的提问来源于stack exchange,提问作者Abhilash Raj
相关产品推荐
相关产品推荐

