Wie kann ich tun cross-domain-postMessage?
In der Dokumentation für postMessage bedeutet, dass cross-domain-messaging ist möglich. Allerdings:
//When the popup has fully loaded, if not blocked by a popup blocker
Ist das nicht ein sehr deutlicher Hinweis von wie tatsächlich tun.
Stellen Sie sich zwei Webseiten:
- [Eltern] gehostet
qc-a.nfshost.com
- [Kind] gehostet
qc-b.quadhome.com
In der parent:
document.addEventListener('message', function(e) {
alert('Parent got (from ' + e.origin + '): ' + e.data);
e.source.postMessage('Round-tripped!', 'http://qc-b.quadhome.com');
}, false);
function go() {
var w = window.open('http://qc-b.quadhome.com', 'test');
/* This doesn't work because same-origin policy prevents knowing when
the opened window is ready. */
w.postMessage('Vain attempt.', 'http://qc-b.quadhome.com');
}
Und das Kind:
document.addEventListener('message', function(e) {
alert('Child got (from ' + e.origin + '): ' + e.data);
}, false);
window.opener.postMessage('Ready!', 'http://qc-a.nfshost.com');
Alles ohne Erfolg.
Helfen?
InformationsquelleAutor Scott Robinson | 2010-07-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Derzeit, ich sehe zwei Probleme. Leichte Fehler im code, und die timeout-Problem.
1) Der Fehler, den ich sehe in deinem code ist, dass Sie durch die Verwendung von Dokumenten.addEventListener. Ich denke, das richtige Fenster ist.addEventListener. Es ist in dem Beispiel auf der postMessage Seite.
2) Mit dem timeout können Sie das untergeordnete Fenster postMessage an die Eltern. Das übergeordnete Fenster wird dann wissen, Wann das Kind bereit ist.
document
mitwindow
- und die ready-callback arbeitete überwindow.opener.postMessage
. Danke!!!Du bist das Fenster zu öffnen & Buchung der Nachricht nach jedem anderen. Es gibt keine Möglichkeit, das geöffnete Dokument wird bereit sein, zu akzeptieren, die post-Meldung. Versuchen Sie verzögern die postMessage-Aufruf, bis das Fenster fertig geladen ist.
Eine sehr einfache Möglichkeit, dies zu testen ist, um wrap-w.postMessage() in ein setTimeout (für 10 Sekunden) und sehen, ob Sie können es veröffentlichen, wenn das Dokument bereit ist.