web-dev-qa-db-fra.com

CORS + Cordova: problèmes avec: Access-Control-Allow-Origin

J'ai cherché des heures sur cette question, mais je ne trouve toujours pas de solution à ce problème.

Je suis en train de développer une application Cordova (essentiellement HTML/JS) Ainsi, l'application fonctionne sur mobile à partir du navigateur et j'ai des difficultés à envoyer une demande ajax à une API: https://developer.riotgames.com/ Mais disons que je veux juste avoir la page Google.

Comment est-ce que je fais cela, est-ce même possible? Voici un exemple simple:

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

Je reçois la même erreur encore et encore: 

XMLHttpRequest ne peut pas charger https://google.com/ . Non L'en-tête 'Access-Control-Allow-Origin' est présent sur le .__ demandé. Ressource. L'origine 'null' n'est donc pas autorisée

L'origine 'null' est parce que je lance le code depuis: file:///D:/Projets/LoL/www/index.html et que le navigateur bloque, mais cela ne fonctionne pas aussi bien si je désactive la sécurité avec --disable-web-security Et bien sûr, je n'ai pas accès au serveur que je veux rejoindre.

Merci beaucoup pour votre aide !

13
Navet

Vous avez besoin du plugin Cordova Liste blanche: https://cordova.Apache.org/docs/en/latest/reference/cordova-plugin-whitelist/ .

Avoir ceci dans config.xml:

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

Et avoir la méta Content-Security-Policy dans index.html. Quelque chose comme:

<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:">
16
Niels Steenbeek

J'ai ajouté ce qui suit dans le serveur noeud js qui résout mon problème;

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();
});

Cela peut être utile si vous utilisez nodejs.

Merci

0
Deepak Bhatta