跨文档信息传递
XDM--Cross-document messaging,来自不同域的页面间传递消息;XDM实现了不同域的两个框架间(或者与弹出窗口间)的通信机制的规范化,主要限制它使用的是浏览器的现代化程度;主要的两个概念
postMessage()方法message事件
postMessage()方法- 注意点:调用这个方法的对象是 目标窗口或框架,会向调用这个方法的框架或窗口发送消息
参数
- 参数一:消息字符串
- 参数二:指定消息接收方法(也就是调用这个方法的目标窗口或框架)的域名,可以通配,用于核对校验
var iframeWindow = document.getElementById('myFrame').contentWindow; iframeWindow.postMessage('Hello', 'http://www.example.com');
message事件 -- 目标框架或窗口接收到XDM消息时,会触发其window对象上的message事件- 支持 DOM 0 级绑定与 DOM 2 级绑定
event对象属性data:消息字符串origin:发送域source:发送消息的文档的window对象代理(并非实际的window对象)
务必在
message事件处理程序上检测消息来源(event.origin)的正确性;event.source可以取得消息发送文档的window对象引用,但不能对于进行其他操作,只用于调用postMessage()发送回执// 目标窗口或框架的程序 eventUtil.addEventHandler(window, 'message', function(event) { // 确保发送消息的域是符合规则的域 if (event.origin == 'http://ce.sysu.edu.cn') { // 调用预先准备好的数据处理函数 processMessage(event.data); // 使用来源窗口代理发送回执 event.source.postMessage('Yes, Received!', 'http://ce.sysu.edu.cn/hope'); } })部分现代浏览器对于
postMessage()方法第一个参数的数据格式支持情况存在差异- 一般只传入 字符串数据
- 部分浏览器其他结构化的数据
XDM对同域窗口或框架也是适用的XDM现在已经做为一个规范独立出来,这是以后框架间、窗口间通信的趋势