Похоже, что смысл window.postMessage заключается в том, чтобы обеспечить безопасную связь между окнами / фреймами, размещенными в разных доменах, но на самом деле это не позволяет этого в Chrome.
Вот сценарий:
- Вставить <iframe> (с a
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, который должен оставаться.
источник
Ответы:
Вот пример, который работает в Chrome 5.0.375.125.
Страница B (содержимое iframe):
<html> <head></head> <body> <script> top.postMessage('hello', 'A'); </script> </body> </html>
Обратите внимание на использование
top.postMessage
илиparent.postMessage
отсутствие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
РЕДАКТИРОВАТЬ:
Из другого вопроса , похоже, что домены (здесь A и B) должны иметь
/
дляpostMessage
правильной работы.источник
postMessage
Вы должны отправить сообщение от фрейма к родительскому после загрузки.
скрипт кадра:
$(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
источник
Возможно, вы пытаетесь отправить свои данные с mydomain.com на www.mydomain.com или наоборот, ВНИМАНИЕ, вы пропустили «www». http://mydomain.com и http://www.mydomain.com - это разные домены для javascript.
источник
file:///
Возможно ли получить ошибки домена при извлечении контента исключительно из локальной файловой системы?