44 votes

Pourquoi ne reçois-je pas un avertissement 'politique d'origine identique' lorsque j'utilise l'API Google Maps?

Je suis en train de faire un service web RESTful appel dans mon JavaScript de la page et obtenez le message d'avertissement suivant:

"Cette page est accéder à l'information qui n'est pas sous son contrôle. Cela pose un risque pour la sécurité. Voulez-vous continuer?"

Maintenant que j'ai lu jusqu'à présent et je suis conscient de la croix-domaine, même origine. Cependant, je n'ai pas de tels avertissements lorsque je consomme d'autres Api comme Google Maps API. Clairement le domaine n'est pas le même que celui de mon domaine local. Quelle est la différence?

Ma première hypothèse est que Google est "importé" dans la page à l'aide de l' <script> balise de tout mon RESTE de la consommation est à l'aide de XMLHttpRequest. SI c'est le cas, quelle est la différence entre ces deux approches que l'on mérite un avertissement et l'autre pas?

Résumé De La Solution:

Je voudrais résumer ce que la solution a ce problème. Vous pouvez trouver un utile URL ici.

Essentiellement, vous injecter du code dans les pages <script> balise lors de l'importation de JavaScript. Rien importés par le biais de cette balise est immédiatement exécuté dans le contexte mondial. Donc au lieu de passer dans un fichier JavaScript, passer une URL vers un site web qui renvoie une page pas de balises HTML, mais plutôt une page qui renvoie un code JavaScript texte qui appelle un rappel dans votre code.

Vous utilisez les paramètres d'URL pour dire la page qu'est - 'callback', pour retourner et tous les paramètres qui doivent aller dans le rappel. Par exemple:

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

Lors de cette évaluation, la page renvoyée par le 'src' le paramètre est:

myCallback( myParam );

Sur le côté serveur, vous allez créer un site à l'URL qui l'emporte sur le OnLoad équivalents (quel que soit le langage côté serveur que vous utilisez). Au lieu d'une page HTML, le OnLoad prendra les paramètres de l'URL et re-swizzle pour correspondre à la fonction de rappel d'appel ci-dessus.

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

Voici ce que le client HTML page va ressembler à 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>

7voto

Jonathan Fingland Points 26224

Ce qui suit pourrait expliquer des choses. http://markmail.org/message/5wrphjwmo365pajy

également, selon http://www.developersdex.com/asp/message.asp?p=2978&r=6619733, ils emploient des hacks de script (par exemple, l'insertion d'un script dans le DOM pour obtenir les données demandées, au lieu de XHR)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X