2013-05-10 92 views
3

我需要將數據從網頁傳遞到該網頁中託管的iFrame。我用window.postMessage。但是iFrame不會收到該事件。使用JavaScript從父到子iFrame進行跨域通信

這是我的代碼片段。 父頁面:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
    <title>Test event listener</title> 
</head> 
<body> 
<script type="text/javascript"> 
function SendMsgToIFrame() { 
    alert("In Parent window "); 
    var myiframe = document.getElementById('myIframe'); 
    if (myiframe.contentDocument) { 
     myiframe.contentDocument.postMessage('Post Message from Parent', '*'); 
    } 
    else if (myiframe.contentWindow) { 
     myiframe.contentWindow.postMessage('Post Message from Parent', '*'); 
    } 
</script> 
<button type="button" onclick="SendMsgToIFrame()">Push to iframe</button> 
<div id="iframeDiv"> 
<iframe id="myIframe" src="http://localhost:50000/Receiver.htm" width="500" height="200" frameborder=10> 
</iframe> 
</div> 
</body> 
</html> 

代碼片段Receiver.htm是:(:8080爲localhost)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
    <title>Got Text</title> 
</head> 
<body> 
<script type="text/javascript"> 
    window.attachEvent("onMessage", myhandler); 

    function myhandler(mobj) { 
     alert("I am in iFrame"); 
     var message = mobj.data; 

     alert("data: " + message); 
    } 
</script> 
<input type="text" name="text1" id="text1" value="text here" /> 
</body> 
</html> 

我Tomcat上運行父頁面。 iFrame正在使用httplistener構建的HTTP服務器上運行。 當我運行父頁面並點擊生成事件的按鈕時,我沒有看到「我在iFrame中」的提示。看起來iFrame根本沒有收到該事件。我在這裏錯過了什麼? 任何幫助非常感謝。謝謝!

回答

0

你的代碼有一些奇怪的部分。您正在使用attachEvent,最好使用addEventListener,您應該發佈到contentWindow,而不是文檔。

+0

我正在使用IE8.addEventListener將無法使用IE8。 AttachEvent是IE8的正確方法。我正在發佈到內容窗口。我的斷點到達了這條線。 – 2013-05-11 01:10:07

0

我的代碼的問題是這樣的: window.attachEvent( 「的onMessage」,將myHandler)

的onMessage應該全部小寫。 一旦我將這一行更改爲下面,它就起作用了。

window.attachEvent("onmessage", myhandler)