web-dev-qa-db-fra.com

Pourquoi n'a-t-je pas d'avertissement de «même politique d'origine» lorsque vous utilisez l'API Google Maps?

Je fais un service de service Web reposant dans ma page JavaScript et obtenez l'avertissement suivant:

"Cette page accède aux informations qui ne sont pas sous son contrôle. Cela pose un risque de sécurité. Voulez-vous continuer?"

Maintenant, j'ai lu sur cela et je suis conscient de la stratégie cross-domaine, même politique d'origine . Cependant, je ne reçois pas de tels avertissements lorsque je consomme d'autres API comme l'API de Google's Maps. Clairement, le domaine n'est pas le même que mon domaine local. Quelle est la différence?

Mon devin initial est que Google est "importé" dans la page en utilisant le <script> tag _ tag tandis que mon REST Consommation utilise xmlhttprequest. Si tel est le cas, quelle est la différence entre ces deux approches qui mériteraient un avertissement et l'autre non?

44
Jordan Parmer

Ce qui suit pourrait expliquer les choses: http://markmail.org/message/5wrphjwmo365Pajy

En outre, ils utilisent des packs de script (par exemple, l'insertion d'un script dans le DOM pour obtenir des données demandées, au lieu de XHR).

7

Je voudrais résumer ce que la solution était à ce problème. Vous pouvez trouver une URL utile ici .

Essentiellement, vous injecte le code à travers les pages <script> Tag lorsque JavaScript importateur. Tout ce importé par cette balise est immédiatement exécutée dans le contexte mondial. Donc, au lieu de passer dans un fichier JavaScript, passez une URL à un site Web qui renvoie une page non des balises HTML, mais plutôt une page qui renvoie le texte de code JavaScript qui appelle un rappel dans votre code.

Vous utilisez des paramètres d'URL pour indiquer à la page ce que "rappel" pour revenir et tous les paramètres nécessaires pour entrer 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 );

Sur le côté serveur, vous créerez un site à cette URL qui remplace l'équivalent de surcharge (avec le langage côté serveur que vous utilisez). Au lieu de la page HTML, le surcharge prendra les paramètres de l'URL et les ressemblera à la relever pour correspondre à l'appel de rappel ci-dessus.

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

Voici ce que la page HTML du 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>
1
Jordan Parmer