Html5 - Пост-сообщение Cross-Browser Iframe - дочерний к родительскому - PullRequest
61 голосов
/ 11 января 2012

Я следовал этому уроку - http://www.youtube.com/watch?v=R2hOvZ7bwXU,, который в основном объясняет, как использовать postmessage для безопасной передачи сообщения между iframe и родительским - вы в итоге получаете что-то вроде этого - http://html5demos.com/postmessage2

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

это мой код получателя (в родительском) -

function handlingMsg(e)
{alert("works")
    if(e.origin == "http://uc.dialogue.net")
        {
                var blah = e.data;
                alert(blah);    
        }
        else{alert("error");}
}
addEventListener("message",handlingMsg, true);

и это функция отправителя, которая вызывается простой формой (на дочернем элементе) -

   var text=$('.srchInput').val();
   window.parent.postMessage(text, "http://uc.dialogue.net");   

Должен ли я ориентироваться на родителя другим способом?

Ура Пол

Ответы [ 2 ]

99 голосов
/ 13 января 2012
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";

// Listen to message from child window
eventer(messageEvent,function(e) {
    var key = e.message ? "message" : "data";
    var data = e[key];
    //run function//
},false);

Получил это для работы с вышеупомянутым на родительской странице и следующим на дочерней странице -

parent.postMessage("loadMyOrders","*");  //  `*` on any domain         

Код скопирован с здесь .

23 голосов
/ 05 мая 2016

Современная упрощенная версия принятого ответа (от которой устарела поддержка ie8 в пользу краткости):

window.addEventListener('message',function(e) {
    var key = e.message ? 'message' : 'data';
    var data = e[key];
    //run function//
},false);

Пожалуйста, смотрите:

...