2015-10-29 7 views
0

HI Я пытаюсь создать iframe и отправить сообщение методом, используя следующий код.Postmessage не работает с динамическим iframe

function sendMessage(){ 
    var text = document.getElementById("message").value; 
    iframe.contentWindow.postMessage(text,"http://localhost"); 
} 

Я добавил событие сообщения на iframe, чтобы я мог зафиксировать соответствующее событие.

iframe.addEventListener("load",function(){iframeLoaded()},false) 
iframe.contentWindow.window. 
    addEventListener("message", function(event){handleMessage(e);},false); 

function iframeLoaded(){ 
    alert("Iframe loaded"); 
} 
function handleMessage(event){ 
    alert(event.data+" Message received"); 
} 

Обращение с почтой не вызвано. http://jsfiddle.net/k2wuk6t3/

ответ

0

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

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

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


Ваш демо (SO has supported live demos for over a year, нет необходимости прибегать к третьим сторонам для них) имеет дополнительную проблему. Вы создаете iframe, привязывая прослушиватель событий message к документу, который загружается в него по умолчанию, а затем устанавливая src, чтобы документ был выброшен (с прослушивателем событий), а новый загружен.

Вот почему вы не видите там исключения безопасности.

Смежные вопросы