Probleme mit Fenster.postMessage auf Chrome
Habe ich fest auf dieser für Stunden.
Habe ich a.html auf http://example.com, die enthält einen iframe mit src zu
b.html auf http://subdomain.example.com. a.html hat einige JS-code
zu postMessage an den iframe.
Den code zu postMessage ist einfach:
iframe_window.postMessage('message', iframe_element.src)
Aber auf diese Weise, Chrome wirft einen Fehler:
Unable to post message to http://subdomain.example.com. Recipient has origin null.
Habe ich auch schon versucht:
iframe_window.postMessage('message', 'http://subdomain.example.com')
Aber KEIN GLÜCK!
Dies ist der EINZIGE WEG, es funktioniert:
iframe_window.postMessage('message', '*')
Aber ich habe gehört, ' * ' ist nicht gut zu verwenden.
Keine Probleme in Firefox.
Nur um zu klären, in Ihrem code verwenden Sie eine echte website?
InformationsquelleAutor user1437328 | 2012-09-28
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sieht aus wie das könnte ein Problem sein, mit dem Kind iframe nicht geladen wird an der Zeit das signal gesendet wird, also iframe.src nicht den richtigen Wert.
Habe ich einige Tests durchgeführt und habe den gleichen Fehler wie du, aber wenn ich gewickelt die postMessage-Aufruf in ein setTimeout und wartete 100ms dann gab es keine Fehlermeldung, die mir sagt, dass dies eine Initialisierung race-Bedingung.
Hier ist, wie ich es implementiert eine saubere Lösung, ohne das setTimeout:
Eltern:
Kind:
Dies ist eine einfache Lösung, in dem das Kind das signal für alle, die es geladen (mit "*", was in Ordnung ist, weil nichts so empfindlich ist, gesendet wird.) Der Elternprozess wartet auf ein event geladen und überprüft, dass es dem Kind, die es interessiert, das ist, Strahlen Sie.
Den übergeordneten sendet dann eine Nachricht an das Kind, die bereit ist, es zu empfangen. Wenn das Kind erhält die Botschaft, die es bringt, die Daten in ein <h1> und fügt, um den <body>.
Getestet habe ich diese in Chrome mit den tatsächlichen subdomains und diese Lösung funktionierte für mich.
It looks like this might be an issue with the child iframe not being loaded at the time the signal is sent
war die Ahnung, die ich brauchte, um die iframe-Kommunikation arbeiten... danke!InformationsquelleAutor Luke Channings