2016-10-02 5 views
3

Я пытаюсь отправить простое сообщение из дочернего документа (iframe) обратно в его прямой родительский элемент, используя API window.postMessage.window.postMessage не работает из iframe в родительский документ

В родительском документе я следующее:

window.addEventListener("message", receiveMessage, true); 
var receiveMessage = function(event) { 
    console.log("Recieved event " + JSON.stringify(event)); 
} 

Тогда в IFRAME У меня есть следующие:

window.parent.postMessage('message', '*'); 

на основе всего, что я читал, это должно работать и мой сообщение журнала должно быть записано на консоль. Кроме того, что он не работает.

Я знаю, что использование * как targetOrigin не всегда безопасно, но на данном этапе я просто хочу разобраться в ссылке.

Любые идеи или что-то очевидное, что мне не хватает?

+0

Что значит «не работает» означает в этом контексте? Есть ли сообщения об ошибках? – Frxstrem

+0

Есть ли обработчик события 'message' в элементе' iframe'? Вызывается 'postMessage()' в окне 'parent'? – guest271314

+0

Если вы действительно написали то, что в вашем вопросе, 'receiveMessage' по-прежнему не определено, когда вы прикрепляете его как обработчик событий. Объявите его перед рукой или используйте дескриптор 'function receiveMessage() {}' функции, чтобы он определялся поверх скрипта. – Kaiido

ответ

0

Убедитесь, что ваша функция обратного вызова receiveMessage() объявлена ​​до, передавая ее в метод addEventListener.

Вот ваш пересмотренная родительский сценарий:

var receiveMessage = function(event) { 
    console.log("Recieved event " + JSON.stringify(event)); 
} 
window.addEventListener("message", receiveMessage, true); 
Смежные вопросы