Jak korzystać z okna.postMessage między domenami?
Wydaje się być punktem okna.postMessage ma umożliwić bezpieczną komunikację między oknami/ramkami hostowanymi w różnych domenach, ale nie wydaje się, aby zezwalał na to w Chrome.
Oto scenariusz:
- Embed an (with a
src
on domain B*) na stronie na domenie a - wzywam okno.postMessage( some_data, page_on_A )
Otrzymuję komunikat o błędzie w Chrome:
Nie można wysłać wiadomości do A . Odbiorca ma pochodzenie B .
Oto kod, który rejestruje słuchacz zdarzeń wiadomości na stronie A:
window.addEventListener(
"message",
function (event) {
// Do something
},
false);
Próbowałem również zadzwonić window.postMessage(some_data, '*')
, ale wszystko, co robi, to tłumić błąd.
Czy ja po prostu pominąłem punkt tutaj, jest okno.postMessage(... nie do tego? Czy robię to strasznie źle?
*Mime-typ tekstu / html, który musi pozostać.
3 answers
Oto przykład, który działa na 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
lub parent.postMessage
NIE window.postMessage
tutaj
Strona 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ś w rodzaju http://domain.com
EDIT:
Z kolejne pytanie wygląda na to, że domeny(A i b tutaj) muszą mieć /
, Aby postMessage
działały poprawnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37
Po załadowaniu należy wysłać wiadomość z ramki do rodzica.
Frame script:
$(document).ready(function() {
window.parent.postMessage("I'm loaded", "*");
});
I wsłuchaj się w rodzica:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-04 10:36:57
Prawdopodobnie próbujesz wysłać swoje dane z mydomain.com na www.mydomain.com lub odwrotnie, zauważ, że przegapiłeś "www". http://mydomain.com i http://www.mydomain.com są innymi domenami niż javascript.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-17 09:20:47