Cordova从服务器加载外部内容

Cordova load external content from server

本文关键字:外部 加载 服务器 Cordova      更新时间:2023-09-26

有很多(几乎)类似的问题,但都没有解决我的问题。

我正在编写一个cordova应用程序(目前仅在andoid和ios上测试),并希望从我的Web服务器加载数据(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请求(否则它可能无法在浏览器中工作):

<?php
header('Access-Control-Allow-Origin: *');
...

但斯蒂尔:科多瓦不想装载任何东西。alert(error);-行显示:

SecurityError:无法对"XMLHttpRequest"执行"open":拒绝连接到"https://myHost.com/?someparams=foo'因为它违反了文档的内容安全策略

科多瓦有什么问题?

您可能需要在index.html中设置内容安全策略,以允许向托管您的服务的域发出请求。

<meta http-equiv="Content-Security-Policy" content="default-src 'self' <enter-your-domain-here> data: gap: https://ssl.gstatic.com;">

cordova插件白名单的自述文件中有更多示例。

有关内容安全策略元标记的更多信息,请点击此处。

基于@toskv的答案。检查您在Cordova的HTML页面是否包含以下元标签:<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工作(正如您所看到的,default-src只允许使用self)。

使用@toskv中的链接了解更多信息。

cordova插件白名单的自述文件中有更多示例。

有关内容安全策略元标记的更多信息,请点击此处。