Html5 - Cross Browser Iframe postmessage - от ребенка к родительскому?
Я слежу за этим учебным пособием - 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");
Должен ли я нацеливаться на родителя по-другому?
Приветствия
Пол
Ответы
Ответ 1
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
Код скопирован из здесь.
Ответ 2
Современная упрощенная версия принятого ответа (от которой устарела поддержка ie8 в пользу краткости):
window.addEventListener('message',function(e) {
var key = e.message ? 'message' : 'data';
var data = e[key];
//run function//
},false);
Посмотри пожалуйста: