如果是使用iframe,代码应该这样写:
<div style="height: 200px; width:300px;"><iframe src="http://localhost:8080/chenzhenhua/lister.html" id="myIFrame"></iframe></div>
//弹出一个新窗口 var domain = 'http://localhost:8080'; var iframe = document.getElementById('myIFrame').contentWindow; //发送消息 setInterval(function(){ var message = 'Hello! The time is: ' + (new Date().getTime()); // console.log('blog.local: sending message: ' + message); //send the message and target URI iframe.postMessage(message,domain); },6000); //响应事件 window.addEventListener('message',function(event) { // if(event.origin !== 'http://davidwalsh.name') return; console.log('index: ' + event.data); // event.source.postMessage('holla back youngin!',event.origin); },false);
确保你使用的是iframe的
contentWindow
属性,而不是节点对象。数据接收端
下面我们要开发的是数据接收端的页面。接收方窗口里有一个事件监听器,监听“message”事件,一样,你也需要验证消息来源方的地址。消息可以来自任何地址,要确保处理的消息是来自一个可信的地址。
//响应事件 window.addEventListener('message',function(event) { // console.log(event); //if(event.origin !== 'http://localhost:8080') return; console.log('message lister: ' + event.data,event); event.source.postMessage('holla back youngin!',event.origin); },false);
上面的代码片段是往消息源反馈信息,确认消息已经收到。下面是几个比较重要的事件属性:
- source – 消息源,消息的发送窗口/iframe。
- origin – 消息源的URI(可能包含协议、域名和端口),用来验证数据源。
- data – 发送方发送给接收方的数据。
这三个属性是消息传输中必须用到的数据。
使用window.postMessage
跟其他很web技术一样,如果你不校验数据源的合法性,那使用这种技术将会变得很危险;你的应用的安全需要你对它负责。
window.postMessage
就像是PHP相对于JavaScript技术。window.postMessage
很酷,不是吗?
转载处:https://www.html5tricks.com/html5-window-postmessage.html