2016-07-19 79 views
0

Hier ist mein Beispielcode Ich versuche zu arbeiten. Obwohl der Iframe die empfangene Nachricht niemals schreibt.Generiere iframe und kommuniziere per Post Nachricht Probleme

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

Ziel Ich versuche schließlich iframe testet in JSDOM Kommunikation zu erreichen, aber ich kann noch nicht einmal im Browser diese Arbeit bekommen.

Wer hat irgendwelche Ideen ...?

Antwort

0

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

Syntax

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

otherWindow

Ein Verweis auf ein anderes Fenster; Eine solche Referenz kann für Beispiel unter Verwendung der ContentWindow -Eigenschaft eines Iframe-Elements, des -Objekts, das von window.open zurückgegeben wird, oder des benannten oder numerischen Indexes an window.frames abgerufen werden.

Sie verwenden das window Objekt Ihrer Seite, wenn Sie das window Objekt des Ziels, zB die iframe werden müssen. So müssen Sie verwenden

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

Ahh !! Danke. Das macht jetzt Sinn. Hier ist eine Geige. https://jsfiddle.net/6k7zpb8b/ – rompetoto

+0

Noch besser ... Ich weiß nicht, warum ich dachte, dass ich Skript-Tags in den iframe schreiben musste .... https://jsfiddle.net/6k7zpb8b/1/ – rompetoto