如果使用iframe的话,那么代码如下:
// 同样创建另一个window(iframe,frame,frameset,top,window这些都属于window相关的对象。)
var domain = ‘http://scriptandstyle.com’;
var iframe = document.getElementById(‘myIFrame’).contentWindow;
// 循环发送消息,当然,也可以采用事件驱动之类的。。。
setInterval(function(){
var message = ‘现在时间: ‘ + (new Date().getTime());
trace(‘数据源.发送的消息: ‘ + message);
iframe.postMessage(message,domain); //发送数据信息,并设置目标URI
},6*1000);
确保能访问到iframe对象的contentWindow 属性——而不仅仅是iframe对象。
二、消息接收端
整个流程的第二步就是让目标window就绪。目的窗口所要做的,就是监听message事件,当然也要验证事件的origin消息源。再次提醒:message事件处理函数可以接受任何域名发给他的消息,所以验证origin以及只处理信任列表的message非常重要。
// 监听收到的信息.
bindEvent(window,’message’,function(event) {
// 只接收特定域的消息
if(event.origin !== ‘http://davidwalsh.name’) return;
trace(‘监听到信息: ‘,event.data);
// 回复消息
event.source.postMessage(“”你好,小伙伴们,我已经收到消息了,event.origin);
},false);
上面的示例回复了响应信息给请求方。
message事件重要的属性有:
source – 发送message的window/iframe对象
origin – 对应着发送消息window的URI (protocol, domain, and port, 如果有指定的话)
data – 具体的数据信息
对于消息系统以及校验来说,这三个对象是必不可少的。
window.postMessage 使用注意事项
就和其他所有的Web技术一样,如果使用不当(没有验证事件源)那危险性是显而易见的。当然,安全性由你自己来保证。
window.postMessage 很像JavaScript技术中的PHP(哈哈,小广告!).window.postMessage 算是一种很酷炫的技术,你觉得呢?









