Je rencontre des problèmes de politique d'origine identique en Javascript. J'ai lu à propos d'une solution de contournement pour cela à l'aide de la variable document.domain
, mais je ne peux pas obtenir la solution de contournement pour fonctionner. La solution de contournement est que vous êtes censé être en mesure de définir document.domain
à 'example.com'
de sorte que si vous exécutez le code à partir de foo.example.com
il peut charger des données via XHR à partir de bar.example.com
.Solution de contournement de stratégie d'origine identique à l'aide de document.domain en Javascript
Détails sur la solution de contournement sont ici:
https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript
Mon exemple de code - qui ne produit pas les résultats escomptés - est exécuté à partir d'une URL comme http://foo.example.com/
:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<script>
document.domain = 'example.com';
window.onload = function() {
var req = new XMLHttpRequest();
var url = 'http://bar.example.com/';
req.open('GET', url, true);
req.onreadystatechange = function (aEvt) {
if (req.readyState == 4) {
var elem = document.getElementById('result');
if (req.status == 200) {
var data = req.responseText;
} else {
var data = "Error loading page: " + req.status;
}
elem.innerHTML = data;
}
};
req.send(null);
};
</script>
Result:<hr>
<div id="result"></div>
</body>
</html>
La sortie de ce code:
Result: Error loading page: 0
Si je change url
en 'http://foo.example.com/'
, tout fonctionne correctement. Y a-t-il un bug dans mon exemple de code?
Je ne veux pas utiliser de proxy car ils sont plus lents, moins efficaces et augmenteront le trafic sur notre serveur Web. Ce serait vraiment cool si cette solution de contournement fonctionnait réellement. Est-ce que cette solution de rechange "tarte dans le ciel"?
Merci j0rd4n, c'est exactement le genre de solution non-proxy que je cherchais, même si j'abusais le mauvais arbre avec document.domain. J'ai trouvé un peu plus d'informations sur le système qu'ils appellent JSONP et comment jQuery a cette fonctionnalité intégrée, ce qui est en dehors de la portée de ma question, mais néanmoins intéressant: http://www.ibm.com/developerworks/library/wa-aj-jsonp1/ – Rubix
Le processus que j'ai mentionné utilise JSONP mais il le fait dans un sens manuel. jquery va gérer la "réception" du JSONP dans le DOM javascript, mais il vous reste à fournir un service qui renvoie le texte JSONP. À la fin de la journée, la page de votre serveur doit renvoyer un fichier JSONP formaté. Votre JavaScript (que ce soit jquery, ext-js, etc.) doit faire l'appel pour exécuter le script à l'intérieur d'une balise de script. –