簡體   English   中英

Cordova 從服務器加載外部內容

[英]Cordova load external content from server

有很多(幾乎)類似的問題,但沒有一個解決了我的問題。

我正在編寫一個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 請求(否則它可能無法在瀏覽器中工作):

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

但仍然:cordova 不想加載任何東西。 alert(error); - 行顯示:

SecurityError: Failed to execute 'open' on 'XMLHttpRequest': Refused to connect to ' 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-plugin-whitelist的 readme 有更多的例子。

可以在此處找到有關內容安全策略元標記的更多信息。

基於@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-plugin-whitelist的 readme 有更多的例子。

可以在此處找到有關內容安全策略元標記的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM