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ć.
źródło
Odpowiedzi:
Oto przykład, który działa w przeglądarce Chrome 5.0.375.125.
Strona B (zawartość iframe):
<html> <head></head> <body> <script> top.postMessage('hello', 'A'); </script> </body> </html>
Zwróć uwagę na użycie
top.postMessage
lubparent.postMessage
niewindow.postMessage
tutajStrona A:
<html> <head></head> <body> <iframe src="B"></iframe> <script> window.addEventListener( "message", function (e) { if(e.origin !== 'B'){ return; } alert(e.data); }, false); </script> </body> </html>
A i B muszą być czymś podobnym
http://domain.com
EDYTOWAĆ:
Z innym pytaniem , wygląda domen (A i B), tutaj musi mieć
/
dlapostMessage
działał poprawnie.źródło
postMessage
Powinieneś wysłać wiadomość z ramki do rodzica, po załadowaniu.
skrypt ramki:
$(document).ready(function() { window.parent.postMessage("I'm loaded", "*"); });
I posłuchaj tego w rodzicu:
function listenMessage(msg) { alert(msg); } if (window.addEventListener) { window.addEventListener("message", listenMessage, false); } else { window.attachEvent("onmessage", listenMessage); }
Użyj tego linku, aby uzyskać więcej informacji: http://en.wikipedia.org/wiki/Web_Messaging
źródło
Prawdopodobnie próbujesz wysłać swoje dane z mojadomena.com do www.mojadomena.com lub odwrotnie, UWAGA przegapiłeś „www”. http://mydomain.com i http://www.mydomain.com to inne domeny niż javascript.
źródło
file:///
Czy można uzyskać błędy domeny podczas pobierania treści wyłącznie z lokalnego systemu plików?