PhoneGap/Cordova 跨域错误是混合应用开发中常见的网络通信问题,其核心原因和解决方案涉及以下技术要点:
file://
协议加载本地HTML,与远程API交互时可能触发WebView的跨域检查。<!-- 错误示例 -->
<access origin="*" /> <!-- 过度宽松的设置仍可能失效 -->
// 控制台报错示例
Failed to load https://api.example.com: Request has been blocked by CORS policy
http://
与https://
混用1. 基础配置修正
<!-- config.xml 必须配置 -->
<widget>
<access origin="https://*.example.com" />
<allow-navigation href="https://*.example.com/*" />
</widget>
2. CSP元标签(HTML头部)
<meta http-equiv="Content-Security-Policy"
content="default-src 'self' https://api.example.com data: gap:;
connect-src 'self' https://api.example.com;
script-src 'self' 'unsafe-inline'">
3. 平台特定处理
// MainActivity.java (Cordova 9+)
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
<!-- config.xml 添加 -->
<platform name="ios">
<allow-navigation href="*" />
<preference name="AllowUntrustedCerts" value="true" />
</platform>
4. 代理方案(终极解决)
// 使用Cordova插件转发请求
cordova.plugin.http.sendRequest('https://api.example.com', {
method: 'get',
headers: { Authorization: 'Bearer xxx' }
}, function(response) {
console.log(response.data);
}, function(error) {
console.error(error);
});
推荐插件:cordova-plugin-advanced-http
--disable-web-security
启动浏览器调试(仅开发环境)Access-Control-Allow-Origin
头典型问题排查流程:
没有搜到相关的文章