Windows应用CORS问题排查:Visual Studio中Cordova项目跨域异常
我之前开发Cordova跨平台项目时,也碰到过和你完全一样的状况——iOS、Android的模拟器和真机都能正常通过AJAX获取服务器数据,唯独切换到Windows应用构建时,CORS问题直接卡住了请求。这主要是因为Cordova的Windows平台WebView(不管是旧的EdgeHTML内核还是新的Chromium内核)在CSP、跨域规则的处理逻辑上,和移动端有不少差异。给你几个针对性的解决思路:
调整Content-Security-Policy(CSP)元标签
移动端用*通配符可能能正常运作,但Windows的WebView对通配符的校验更严格,尤其是connect-src规则。建议把CSP里的connect-src *改成你实际的服务器域名,比如:<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; connect-src https://your-api-domain.com; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src * data:;">明确指定允许连接的域名,能避免Windows WebView的CSP校验拦截请求。
在Cordova config.xml中添加允许导航规则
Windows平台需要明确告知WebView哪些域名是合法可访问的,在项目根目录的config.xml里添加:<allow-navigation href="https://your-api-domain.com/*" />这个配置会让Cordova的Windows WebView认定该域名下的请求是合规的,不会触发跨域限制。
完善后端的CORS响应头配置
虽然你已经加了Access-Control-Allow-Origin: *,但Windows的WebView会发送OPTIONS预检请求,后端需要正确处理这个请求才能让后续的GET请求正常执行。在web.config里补充以下配置:<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS" /> <add name="Access-Control-Allow-Headers" value="Content-Type, X-Requested-With" /> <add name="Access-Control-Max-Age" value="3600" />确保OPTIONS请求能收到合法响应,后续的业务请求才能顺利发起。
检查Windows应用的网络权限
这个细节很容易被忽略——UWP应用默认可能没有互联网访问权限。打开Windows项目下的Package.appxmanifest,确认已添加互联网客户端权限:<Capabilities> <Capability Name="internetClient" /> </Capabilities>没有这个权限的话,应用连基础网络访问都做不到,更别说跨域请求了。
我当时就是按照这个顺序排查的,先补了网络权限,再调整了CSP和config.xml的配置,问题很快就解决了。
内容的提问来源于stack exchange,提问作者Mr. Blonde

