2012-01-11 28 views
50

Tôi đã làm theo hướng dẫn này - http://www.youtube.com/watch?v=R2hOvZ7bwXU, mà về cơ bản giải thích làm thế nào để sử dụng một cách an toàn PostMessage để vượt qua một thông điệp giữa iframe và mẹ - về cơ bản bạn kết thúc với một cái gì đó như thế này - http://html5demos.com/postmessage2Html5 - Đăng tải khung nội tuyến qua trình duyệt - con của cha mẹ?

Vấn đề của tôi là tôi cần nó để làm việc theo cách ngược lại (con cho cha mẹ) và không biết làm thế nào để nhắm mục tiêu cửa sổ cha mẹ.

đây là mã của tôi nhận (trong công ty mẹ) -

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); 

và đây là chức năng gửi được kích hoạt bởi một hình thức đơn giản (trong đứa trẻ) -

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

Tôi có nên được nhắm mục tiêu phụ huynh theo một cách khác?

Cheers Paul

Trả lời

91
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); 

Got nó để làm việc với các bên trên trong trang mẹ và sau đây trong trang trẻ em -

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

Mã sao chép từ here.

+3

Awesome! Lưu ý rằng trong trình lắng nghe eventer, 'e.message ==" loadMyOrders "' – bergie3000

+3

Cảm ơn vì điều đó. Mặc dù trong Chrome, tôi có 'e.data ==" loadMyOrders "'. –

+8

Đôi khi bạn cần sử dụng window.opener.postMessage(); Ví dụ: nếu cửa sổ con có một số chuyển hướng. – Aldekein

13

A, phiên bản đơn giản hiện đại của câu trả lời được chấp nhận (mà giọt hỗ trợ di sản ie8, và làm cho nhiều mã dễ đọc hơn):

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

Xin xem:

Các vấn đề liên quan