有很多(几乎)类似的问题,但没有一个能解决我的问题。
我正在编写一个cordova应用程序(目前只在andoid和ios上进行测试),并希望从我的网络服务器加载数据(采用JSON格式)。我使用jQuerys $.ajax
- 方法。
到目前为止我的代码:
$.support.cors = true;
var ret = -1;
$.ajax(url, {
traditional: true,
type: 'POST',
url: url,
contentType: 'text/plain',
xhrFields: {
withCredentials: false
},
data: dataString,
success: function (data) {
alert('Data recieved:');
alert(data);
ret = data;
},
error: function (xhr, ajaxOptions, error) {
alert('There was an error');
alert(error);
alert(xhr.status);
}
});
return ret;
这适用于浏览器(在最新的Firefox中测试过),但不适用于应用程序。错误似乎是关于跨源页面加载。
我的config.xml如下所示:
...
<plugin name="cordova-plugin-whitelist" spec="1" />
<access origin="*" />
...
服务器通过标头接受cors-requests(否则它可能无法在浏览器中工作):
<?php
header('Access-Control-Allow-Origin: *');
...
但是stil:cordova并不想加载任何东西。 alert(error);
- 行显示了这一点:
SecurityError:无法执行&#39;打开&#39; on&#39; XMLHttpRequest&#39;:拒绝连接到&#39; https://myHost.com/?someparams=foo&#39;因为它违反了文档的内容安全策略
科尔多瓦有什么问题吗?
答案 0 :(得分:4)
您可能需要在index.html中设置内容安全策略,以允许对托管您服务的域的请求。
<meta http-equiv="Content-Security-Policy" content="default-src 'self' <enter-your-domain-here> data: gap: https://ssl.gstatic.com;">
cordova-plugin-whitelist 的自述文件有更多示例。
可以找到有关内容安全策略元标记的更多信息here。
答案 1 :(得分:2)
基于@toskv
的答案。检查Cordova中的HTML-Pages是否包含以下元标记:<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
。默认情况下,Cordova会添加元标记并阻止CORS正常工作(因为您只能看到self
允许default-src
)。
使用@toskv
中的链接了解详情。
cordova-plugin-whitelist 的自述文件有更多示例。
可以找到有关内容安全策略元标记的更多信息here。