Как вы используете window.postMessage через домены?
Кажется, что пункт window.postMessage - обеспечить безопасную связь между окнами/кадрами, размещенными на разных доменах, но это не так на самом деле, похоже, это разрешено в Chrome.
Здесь сценарий:
- Вставить <iframe> (с
src
в домене B *) на странице в домене A
- <iframe> заканчивается в основном <script> тег, в конце которого выполняется...
- Я вызываю window.postMessage(some_data, page_on_A)
<iframe> наиболее определенно в контексте домена B, и я подтвердил, что встроенный javascript в этом <iframe> выполняется правильно и вызывает postMessage
с правильными значениями.
Я получаю это сообщение об ошибке в Chrome:
Невозможно отправить сообщение A. Получатель имеет происхождение B.
Здесь код, который регистрирует прослушиватель событий сообщения на странице A:
window.addEventListener(
"message",
function (event) {
// Do something
},
false);
Я также пробовал вызывать window.postMessage(some_data, '*')
, но все, что делает это, подавляет ошибку.
Я просто пропустил здесь пункт, это window.postMessage(...), не предназначенное для этого? Или я просто делаю это ужасно неправильно?
* Mime-type text/html, который он должен оставаться.
Ответы
Ответ 1
Вот пример, который работает в Chrome 5.0.375.125.
Страница B (содержимое iframe):
<html>
<head></head>
<body>
<script>
top.postMessage('hello', 'A');
</script>
</body>
</html>
Обратите внимание на использование top.postMessage
или parent.postMessage
not window.postMessage
здесь
Страница 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 и B должны быть чем-то вроде http://domain.com
EDIT:
Из другого вопроса, он выглядит, что домены (здесь и A здесь) должны иметь /
для правильной работы postMessage
.
Ответ 2
После загрузки следует отправить сообщение от фрейма к родительскому.
кадр script:
$(document).ready(function() {
window.parent.postMessage("I'm loaded", "*");
});
И послушайте его в ролике:
function listenMessage(msg) {
alert(msg);
}
if (window.addEventListener) {
window.addEventListener("message", listenMessage, false);
} else {
window.attachEvent("onmessage", listenMessage);
}
Используйте эту ссылку для получения дополнительной информации: http://en.wikipedia.org/wiki/Web_Messaging
Ответ 3
Вероятно, вы пытаетесь отправить свои данные с mydomain.com на www.mydomain.com или наоборот, ПРИМЕЧАНИЕ. Вы пропустили "www". http://mydomain.com и http://www.mydomain.com - это разные домены для javascript.