2016-07-19 8 views
0

Вот мой пример кода Я пытаюсь работать. Хотя iframe никогда не записывает полученное сообщение.Создайте iframe и сообщите об ошибках сообщения

var frame = document.createElement('iframe'); 
frame.setAttribute('src', 'about:blank'); 
window.document.body.appendChild(frame); 

var frameDoc = frame.contentWindow.document; 
frameDoc.body.appendChild(frameDoc.createTextNode('Hi!')); 

var code = 'window.addEventListener("message", function(){document.body.innerHTML = "Recieved Message"});'; 
var loaded = 'window.onload = function(){' + code + '};'; 
var val = '<scr' + 'ipt type="text/javascript">' + loaded + '</scr' + 'ipt>'; 

frameDoc.open(); 
frameDoc.write(val); 
frameDoc.close(); 

setTimeout(function(){ 
    console.log('posting message...'); 
    window.postMessage({ 
    foo: 'bar' 
    },'*'); 
}, 1000); 

Цель Я пытаюсь в конечном итоге достичь тестирует IFrame коммуникации в JSDOM, но я даже не могу получить эту работу в браузере еще.

У кого-нибудь есть идеи ...?

ответ

0

https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

Синтаксис

otherWindow.postMessage(message, targetOrigin, [transfer]); 

otherWindow

Ссылка на другое окно; такая ссылка может быть получена для , например, с использованием свойства contentWindow элемента iframe, объекта , возвращаемого window.open, или с помощью имени или числового индекса на window.frames.

Вы используете window объект вашей страницы, когда вам нужно, используя window объект мишени, например, в IFRAME. Таким образом, вам необходимо использовать frame.contentWindow

frame.contentWindow.postMessage({ 
    foo: 'bar' 
},'*'); 
+0

Ahh !! Спасибо. Теперь это имеет смысл. Вот скрипка. https://jsfiddle.net/6k7zpb8b/ – rompetoto

+0

Еще лучше ... Я не знаю, почему я думал, что должен писать сценарии сценариев в iframe .... https://jsfiddle.net/6k7zpb8b/1/ – rompetoto