2016-06-15 57 views
8

有些事情我沒有通過javascript postMessage事件瞭解到事件源。從沙盒iFrame到主窗口的PostMessage始發始終爲空

這是我的主網頁:

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

而且我的iFrame內容

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

查看控制檯,事件對象的origin屬性總是空,即使在域變量iFrame是正確的。

我的控制檯說:

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…} 

在每個文檔,它說,它以檢查日「信息」事件監聽器裏event.origin是很重要的。但如何做到這一點,如果它總是空?

感謝您的幫助

+0

[無法在'DOMWindow'上執行'postMessage':提供的目標原點與收件人窗口的原點('null')]不匹配(http://stackoverflow.com/questions/22194409/failed- domwindow-the-target-origin-provided-does) –

+0

不,這是一個完全不同的問題,雖然原因是一樣的。我也有... – Sych

回答

1

由於iframe被沙箱化,它失去了對原始數據的訪問。

allow-same-origin添加到iframe沙箱屬性將使其重新工作。