Wygląda na to, że celem window.postMessage jest umożliwienie bezpiecznej komunikacji między oknami / ramkami hostowanymi w różnych domenach, ale w rzeczywistości wydaje się, że nie pozwala na to w Chrome.
Oto scenariusz:
- Umieść element <iframe> (oznaczony literą
src
w domenie B * ) na stronie w domenie A - <iframe> kończy się głównie na tagu <script>, na końcu którego wykonanie ...
- Wzywam window.postMessage ( some_data , page_on_A )
Element <iframe> jest zdecydowanie w kontekście domeny B i potwierdziłem, że kod javascript osadzony w <iframe> działa poprawnie i wywołuje postMessage
z poprawnymi wartościami.
W przeglądarce Chrome pojawia się ten komunikat o błędzie:
Nie można dodawać wiadomości do A . Odbiorca ma pochodzenie B .
Oto kod, który rejestruje odbiornik zdarzeń wiadomości na stronie A:
window.addEventListener(
"message",
function (event) {
// Do something
},
false);
Próbowałem też dzwonić window.postMessage(some_data, '*')
, ale wszystko, co robi, to wyeliminowanie błędu.
Czy po prostu nie mam tu sensu, czy window.postMessage (...) nie jest do tego przeznaczone? A może po prostu robię to strasznie źle?
* Tekst / html typu Mime, który musi pozostać.