2016-05-23 225 views
8

我在這個問題上一直在尋找幾個小時,但我仍然找不到任何解決方案。CORS + Cordova:問題:Access-Control-Allow-Origin

我深化發展的應用科爾多瓦(basicely HTML/JS) 所以:應用程序從導航手機上運行,​​並且我有麻煩做一個Ajax請求的API:https://developer.riotgames.com/ 但是,讓我們說,我只是想獲取谷歌頁面。

我到底該怎麼做?這甚至有可能嗎? 下面是一個簡單爲例:

$.ajax({ 
    type: "GET", 
    url: "https://google.com", 
    dataType: "text", 
    success: function(response){ 
     alert("!!!"); 
    }, 
    error: function(error){ 
     alert("..."); 
    } 
}); 

,我一次又一次地得到相同的錯誤:

XMLHttpRequest cannot load https://google.com/ . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access

起源「空」是因爲我從運行代碼:file:///D:/Projets/LoL/www/index.html和我讀到了導航器被阻止,但是如果我通過--disable-web-security 禁用安全性,它也不會工作。當然,我無法訪問我想加入的服務器。

非常感謝您的幫助!

+1

的可能的複製[XmlHttpRequest的錯誤:原產地空不受訪問控制允許來源允許](http://stackoverflow.com/questions/3595515/xmlhttprequest-error-origin-null-不允許訪問控制允許來源)。我建議在JSONP上做一些閱讀,但總的來說,如果你不能修改服務器,那麼沒有好的辦法去做你想做的事情。 – CollinD

回答

9

您需要科爾多瓦白名單插件:https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/

有這種config.xml中:

<access origin="*" /> 
<allow-navigation href="*"/> 

而且具有index.html中的內容安全,政策元。例如:

<meta http-equiv="Content-Security-Policy" content="default-src *; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data:"> 
+2

當我作爲瀏覽器運行時,它不適用於我。 我仍然有: 「跨源請求被阻止:同源策略不允許讀取http:// localhost:7788/testAction處的遠程資源,可以通過將資源移動到同一個域或啓用CORS來解決此問題。 – Emiter

+0

如果你部署到手機上,你可能會得到更好的結果,我讀過(不幸的是,我不記得在哪裏),CORS響應與應用程序或瀏覽器運行時略有不同,我創建了一個測試應用程序,在我的元標記中啓用了CORS只有當我將它部署到我的手機時才起作用 - 而不是從我的桌面上。 – nmcilree

0

我在nodjs服務器中添加了以下內容,它解決了我的問題;

app.use(function(req, res, next) { 
res.header("Access-Control-Allow-Origin", "*"); 
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
next(); 

});

如果您使用nodejs,這可能會有幫助。

由於