2009-05-29 2 views
40

Ich mache einen RESTful Web Service-Aufruf in meiner JavaScript-Seite und erhalte die folgende Warnung:Warum erhalte ich bei Verwendung der Google Maps-API nicht die Warnung "Gleiche Herkunftsrichtlinie"?

"Diese Seite greift auf Informationen zu, die nicht unter ihrer Kontrolle stehen. "

Jetzt habe ich darüber nachgelesen und bin mir der cross-domain, same origin policy bewusst. Solche Warnungen erhalte ich jedoch nicht, wenn ich andere APIs wie Google Maps API verwende. Offensichtlich ist die Domain nicht mit meiner lokalen Domain identisch. Was ist der Unterschied?

Meine erste Vermutung ist, dass Google in die Seite mit dem <script>-Tag "importiert" wird, während meine REST-Verbrauch XMLHttpRequest verwendet. Wenn das der Fall ist, was ist der Unterschied zwischen diesen beiden Ansätzen, dass man eine Warnung verdient und die andere nicht?

+0

ein Tool wie Fiddler2 Erhalten Sie und beobachten Sie die Magie – epascarello

+0

Das ist für mich nicht wirklich funktioniert. Ich habe es versucht, und immer noch verweigert Genehmigung Fehler in Chrome und Firefox. – Merritt

+0

@Merritt - Sie müssen dies in Teilen debuggen. Wenn Sie in einem Webbrowser zu Ihrer Proxy-Seite navigieren, erhalten Sie einen Text zurück, dessen Inhalt der JavaScript-Aufruf ist? –

Antwort

5

Die folgende könnte Dinge erklären: http://markmail.org/message/5wrphjwmo365pajy

Auch sie verwenden einige Skript Hacks (zum Beispiel ein Skript in das DOM Einfügen angeforderten Daten zu erhalten, statt XHR).

+0

Es sieht aus, als ob Sie die eine mutige Seele mit der richtigen Antwort sind! Vielen Dank! Der letzte Thread gab einen zusammenfassenden Blogeintrag unter: http://www.teamallala.com/blog/2009/04/14/how-do-you-get-data-from-one-domain-to-another-using-using- javascript/ –

+0

danke für das hinweisend. offensichtlich könnte ihre Technik nützlicher gemacht werden, indem Abfrage-String-Parameter verwendet werden, um sie in den meisten Fällen relevanter zu machen. –

+2

Ihr Link ist nicht mehr gültig. Obwohl die eine Mail-Gruppe funktioniert. –

0

Ich möchte zusammenfassen, was die Lösung für dieses Problem war. Sie finden eine hilfreiche URL here.

Im Wesentlichen injizieren Sie Code über die Seiten <script> Tag beim Importieren von JavaScript. Alles, was über dieses Tag importiert wird, wird sofort im globalen Kontext ausgeführt. Anstatt also eine JavaScript-Datei zu übergeben, geben Sie eine URL an eine Website weiter, die eine Seite zurückgibt, die nicht aus HTML-Tags besteht, sondern eine Seite, die JavaScript-Code zurückgibt, der einen Rückruf in Ihrem Code aufruft.

Mithilfe von URL-Parametern teilen Sie der Seite mit, welcher Callback zurückgegeben werden soll und welche Parameter in den Callback eingehen müssen. Zum Beispiel:

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

Wenn diese ausgewertet wird, ist der Inhalt der Seite durch die ‚src‘ Parameter zurückgegeben:

myCallback(myParam); 

Auf der Server-Seite, erstellen Sie eine Website zu dieser URL, die den überschreibt OnLoad-Entsprechung (mit der von Ihnen verwendeten serverseitigen Sprache). Anstelle von HTML-Seiten werden die URL-Parameter vom OnLoad übernommen und erneut geswizzed, damit sie dem obigen Callback-Aufruf entsprechen.

Wenn die Ersetzung durchgeführt wird, wird der Rückruf sofort aufgerufen, wenn der Client die Seite lädt. Der Vorteil ist, dass die 'src'-URL nicht mit der Domain der gehosteten Seite übereinstimmen muss.

Hier ist, was der Client-HTML-Seite am Ende aussehen wird:

<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> 
Verwandte Themen