Wie macht Google API domainübergreifende Anfragen zurück zu Google, wenn es auf Ihrer Website ist?Wie geht Google JavaScript-API um die domänenübergreifende Sicherheit in AJAX
Antwort
AFAIK sie verwenden IFRAMEs.
Sie umgehen es, indem Sie Skript-Tags dynamisch in den Kopf des Dokuments injizieren. Das Javascript, das über diese Injektion gesendet wird, enthält eine Callback-Funktion, die das Skript auf der geladenen Seite und die Nutzdaten (Daten) angibt.
Das Skript kann dann das dynamisch eingefügte Skript-Tag entfernen und fortfahren.
Eine andere Möglichkeit ist es, die window.name
Transport zu verwenden, wie für den Dojo Framework beschrieben here
Die akzeptierte Antwort ist falsch. Ben hat Recht. Unten ist der tatsächliche Iframe-Knoten, der mit Hilfe der Google API JavaScript Client von einer Seite gezogen wurde.
<iframe name="oauth2relay678" id="oauth2relay678"
src="https://accounts.google.com/o/oauth2/postmessageRelay?
parent=https%3A%2F%2Fwww.example.com.au#rpctoken=12345&forcesecure=1"
style="width: 1px; height: 1px; position: absolute; left: -100px;">
</iframe>
Grund Zusammenfassung, wie das funktioniert, ist hier: http://ternarylabs.com/2011/03/27/secure-cross-domain-iframe-communication/. In modernen Browsern verwenden sie HTML postMessage, um Kommunikation zu erreichen, und in älteren Browsern verwenden sie einen sauberen Multiple-iframe-urlhash-read + write-combination-Hack. Ternary Labs haben eine library gemacht, die alle Hacky-Sachen abstrahiert und Ihnen im Grunde postMessage auf allen Browsern gibt.
Eines Tages wurde ich ontop dieser Bibliothek bauen werden Cross-Domain-REST-APIs zu vereinfachen ...
Edit: An diesem Tag ist gekommen und XDomain ist hier - https://github.com/jpillora/xdomain
Sieht aus wie Google Display-Karten verwenden die <img> tag Ich denke, sie verwenden die JavaScrit-Bibliothek, um alle Koordinaten und andere Parameter der src URL zu erarbeiten, dann fügen Sie die < Tags (zusammen mit einer Million anderer Tags) in Ihr DOM.
Die vollständige Karte unten mit mehreren Scheiben, wie die HTML aufgebaut:
< img src = "https://mts1.google.com/vt/[email protected] & hl = en & src = app & x = 32741 & s = & y = 21991 & z = 16 & scale = 1,100000023841858 & s = Galile "class = "CSS-3D-layer" style =" position: absolute; left: 573px; top: 266px; width: 128px; Höhe: 128px; Rahmen: 0px; Auffüllung: 0px; Rand: 0px; " >
(Sie können diesen HTML-Code in Ihre eigene Webseite einfügen um das Ergebnis zu sehen)
So Google Maps nicht verwendet AJAX oder etwas zu bekommen ihre Karten einfach nur Bilder, on the fly erstellt. Also keine Cross-Domain-Probleme zu kümmern ...
Ich stimme dir zu. Google sollte etwas Ähnliches verwenden, da sie einen Post-zu-ihrem-Kalender-Dienst verwenden, der die Javascript-Bibliothek verwendet, die in JSONp nicht möglich ist. +1 – Ramesh
Sie können jedoch keine Daten von einem domainübergreifenden Iframe abrufen - Sie können Daten hochladen, aber Sie können kein Ergebnis sehen. Da Sie GET-Argumente mit jsonp verwenden können, die Ihnen erlauben, das Gleiche wie Post zu senden (außer Dateien oder _groge_ Mengen von Daten), verwenden sie fast sicher keine iframes. – tobyodavies
iframes sind die 2. dümmste Erfindung aller Zeiten. –