2009-05-29 8 views
40

Je fais un appel de service Web RESTful dans ma page JavaScript et je reçois l'avertissement suivant:Pourquoi ne reçois-je pas un avertissement de «même règle de l'origine» lorsque j'utilise l'API Google Maps?

"Cette page permet d'accéder à des informations qui ne sont pas sous son contrôle, ce qui représente un risque pour la sécurité. "

Maintenant, j'ai lu à ce sujet et je suis au courant de la cross-domain, same origin policy. Cependant, je ne reçois pas de tels avertissements lorsque je consomme d'autres API telles que Google Maps API. Clairement, le domaine n'est pas le même que mon domaine local. Quelle est la différence?

Ma première estimation est que Google est «importé» dans la page en utilisant la balise <script> pendant que ma consommation REST utilise XMLHttpRequest. Si tel est le cas, quelle est la différence entre ces deux approches que l'un mériterait un avertissement et l'autre pas?

+0

Obtenez un outil tel que Fiddler2 et regarder la magie – epascarello

+0

Cela ne fonctionne pas vraiment pour moi. Je l'ai essayé, et toujours eu le refus des erreurs d'autorisation dans chrome et firefox. – Merritt

+0

@Merritt - Vous devrez déboguer ceci dans certaines parties. Si vous accédez à votre page proxy dans un navigateur Web, obtenez-vous du texte dont le contenu est l'appel JavaScript? –

Répondre

5

Les points suivants pourraient expliquer les choses: http://markmail.org/message/5wrphjwmo365pajy

, ils emploient également quelques hacks de script (insérer par exemple un script dans le DOM pour obtenir des données demandées, au lieu de XHR).

+0

On dirait que vous êtes l'âme courageuse avec la bonne réponse! Merci! Le dernier fil a donné un résumé de blog à: http://www.teamlalala.com/blog/2009/04/14/how-do-you-get-data-from-one-domain-to-another-using- javascript/ –

+0

merci de le signaler. de toute évidence, leur technique pourrait être rendue plus utile en prenant des paramètres de chaîne de requête pour la rendre plus pertinente dans la plupart des cas. –

+2

Votre lien n'est plus valide. Bien que le groupe un mail fonctionne. –

0

Je voudrais résumer ce que la solution était à ce problème. Vous pouvez trouver une URL utile here. Fondamentalement, vous injectez du code à travers les balises pages <script> lors de l'importation de JavaScript. Tout ce qui est importé via cette balise est exécuté immédiatement dans le contexte global. Ainsi, au lieu de transmettre un fichier JavaScript, transmettez une URL à un site Web qui renvoie une page qui ne contient pas de balises HTML, mais une page qui renvoie un texte de code JavaScript qui appelle un rappel dans votre code.

Vous utilisez des paramètres d'URL pour indiquer à la page le "rappel" à renvoyer et tous les paramètres devant être inclus dans le rappel. Par exemple:

<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param1=myParam"></script> 

Lorsque cela est évalué, le contenu de la page retournée par le paramètre « src » est:

myCallback(myParam); 

Du côté du serveur, vous allez créer un site à l'URL qui remplace la OnLoad équivalent (avec n'importe quel langage côté serveur que vous utilisez). Au lieu de la page HTML, l'OnLoad prendra les paramètres d'URL et les re-swizzle pour correspondre à l'appel de rappel ci-dessus.

Lorsque la substitution est effectuée, le rappel est immédiatement appelé lorsque le client charge la page. L'avantage de ceci est que l'URL 'src' n'a pas à correspondre au domaine de la page hébergée.

Voici ce que la page HTML client ressemblera à la fin:

<script type="text/javascript"> 
    var myCallback = function(myParam) { 
     alert("this was called across domains!"); 
    }; 
</script> 
<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param=myParam></script>