Noch keine Lösung: message von iframe wird nicht von parent empfangen
bearbeitet von
Hallo Linuchs,
ich war am verlängerten Wochenende weg vom PC und konnte das Thema deshalb nicht bearbeiten.
> Habe vor 10, 12 Jahren eine eigene Lösung gebastelt
Was damals vermutlich wegen der [IE-Quirks](https://stackoverflow.com/questions/16226924/is-cross-origin-postmessage-broken-in-ie10) nötig war.
> Das klappt doch mit remso im iframe auch, wieso jetzt nicht?
Das klappt mit shanty-fsd.de im Parent und remso.eu im iframe? Inwiefern? Dort finde ich auf den ersten Blick keinen postMessage vom iframe zum Frame-Host und im Frame-Host auch keine Registrierung auf das message-Event.
Ich finde im Netz allerdings auch die Hypothese (von 2013), dass ein unterschiedlicher Origin bei gleichem Host (also gleicher Empfänger-IP) nicht beachtet würde. Was damals möglicherweise ein Bug im IE war, mein eigener Versuch mit Edge bestätigt das nicht.
> Die console-Meldung wird nicht angezeigt. Auch keine Fehlermeldung
Bei mir kommt aber eine Fehlermeldung:
Hostseite: http://127.0.0.1:9000/parent.html
Frameseite: http://127.0.0.1:9001/iframecontent.html
> Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('http://127.0.0.1:9001') does not match the recipient window's origin ('http://127.0.0.1:9000').
Die Lösung ist keine Sache von CORS-Headern, wie behauptet wurde, sondern erfordert eine korrekte Parametrierung der postMessage Methode.
[Im Selfwiki](https://wiki.selfhtml.org/wiki/JavaScript/Window/postMessage) und auch bei [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) steht, was zu tun ist. Ich habe das im Wiki-Artikel nochmal betont: Bei einem Cross-Origin Versand muss man explizit angeben, an welchen Origin versendet werden **darf**. Oder man gibt an, dass einem der Empfänger-Origin egal ist (was aber nicht gut ist, denn man möchte ja nicht unbedingt fremd-geframed werden).
Der targetOrigin ist per Default der Origin der Absende-Seite. Bei mir war das http://127.0.0.1:9001, deshalb steht das als "target origin provided" in der Fehlermeldung.
Lösung für Dich sollte sein:
~~~js
// In https://shantyfreun.de
window.parent.postMessage( window.outerHeight, "https://shanty-fsd.de");
~~~
_Rolf_
--
sumpsi - posui - obstruxi