2016-06-15 13 views
8

Es gibt etwas, das ich über die Ereignisherkunft mit JavascriptpostMessage Ereignis nicht erhalte.PostMessage von einem Sandboxed iFrame zum Hauptfenster, Ursprung ist immer Null

Hier ist meine Haupt-Seite:

<html> 
<body> 

<h1>Test</h1> 
<h2>Outside</h2> 

<iframe src="iframe-include.html" 
    width="100%" height="100" 
    sandbox="allow-scripts"></iframe> 

<script type="text/javascript"> 
window.addEventListener('message', function (event) { 
    console.log(event); 
}, false); 
</script> 

</body> 
</html> 

Und mein iFrame Inhalt

<html> 
<body> 

<h3>Inside</h3> 

<script type="text/javascript"> 
var counter = 1, 
    domain = window.location.protocol + '//' + window.location.host, 
    send = function() { 
     window.setTimeout(function() { 
      console.log('iframe says:', domain); 
      window.parent.postMessage(counter, domain); 
      counter += 1; 
      send(); 
     }, 3000); 
    }; 

send(); 
</script> 

</body> 
</html> 

an der Konsole sucht, die Ursprung Eigenschaft des Ereignisobjekts immer null ist, auch wenn die Domain Variable in Der iFrame ist korrekt.

Meine Konsole sagt:

iframe-include.html:11 iframe says: http://127.0.0.1:8181 
iframe.html:11 MessageEvent {isTrusted: true, data: 2, origin: "null", lastEventId: "", source: Window…} 

In jedem doc, heißt es, dass es wichtig ist, auf event.origin innerhalb de "message" Ereignis-Listener zu überprüfen. Aber wie geht das, wenn es immer null ist?

Danke für die Hilfe

+0

Mögliches Duplikat von [Ausführen von 'postMessage' auf 'DOMWindow' fehlgeschlagen: Der angegebene Zielursprung stimmt nicht mit dem Ursprung des Empfängerfensters ('null') überein] (http://stackoverflow.com/questions/22194409/failed- to-execute-postmessage-auf-domwindow-the-target-ursprung-zur-bereitstellung-tut) –

+0

Nein, es ist ein ganz anderes Problem, obwohl die Ursache die gleiche ist. Ich habe es auch ... – Sych

Antwort

1

Seit der iframe ist Sandbox es den Zugriff auf seine Herkunft Daten verloren.

durch Hinzufügen von allow-same-origin zur iframe-Sandbox-Eigenschaft wird es wieder funktionieren.