2014-10-02 81 views
0

我想在主窗口和頁面中加載的iframe之間進行通信。我過去做過這件事(代碼仍然有效),但是我不能在另一個項目中使用它。我創建了一個例子來重現這個問題。它有一個基本的服務器端(僅供應一些文件)使用Le Statique module使用postMessage時「消息」事件未被觸發

最重要的部分是客戶端,但讓我們先從服務器:

服務器(的NodeJS)

創建兩個服務器(在8000一個聆聽和另一個監聽9000)。

// Dependencies 
var Statique = require("statique") 
    , Http = require('http') 
    ; 

Http.createServer(new Statique({ 
    root: __dirname + "/receiver" 
}).setRoutes({ 
    "/": "/html/index.html" 
}).serve).listen(8000); 

Http.createServer(new Statique({ 
    root: __dirname + "/sender" 
}).setRoutes({ 
    "/": "/html/index.html" 
}).serve).listen(9000); 

客戶

接收機

... 
window.onload = function() { 
    addEventListener("message", function (e) { 
     // This part is never fired! 
     console.log("2", e.data); 
    }, false); 
}; 
... 

發件人

... 
<body> 
    <iframe src="http://localhost:8000" frameborder="0" id="iframe"></iframe> 
    <script> 
     iframe.contentWindow.postMessage("hi", "*"); 
    </script> 
</body> 
... 

然而,從IFRAME "message"事件不會被解僱。爲什麼?

我在控制檯中看不到任何錯誤。

回答

1

iframe窗口未完全加載(沒有人收聽"message"事件)。

通過監聽iframe的負載情況下,我們相信,一切都被加載,我們可以發出事件:

iframe.onload = function() { 
    iframe.contentWindow.postMessage("hi", "*"); 
};