首页 > 代码库 > 9月9号=》461页-465页
9月9号=》461页-465页
18.1 跨文档消息传递
在以前,如果要在两个window装载的HTML文档之间传递消息,实现起来可能比较困难,因为所有的JavaScript脚本都是在一个window对象中装载并执行,
而两个window对象中的JavaScript对象很难相互传递消息。
跨文档消息传递机制的出现改变了这种现状,跨文档消息传机制可以保证两个不同window中的JavaScript脚本能互相通信,这样就可以解决它们的消息传递问题了。
18.1.1 postMessage 与 onmessage
跨文档消息传递靠的是window对象新增的一个方法和一个事件监听器属性。向指定窗口发送消息的方法如下。
targetWindow.postMessage(message,targetOrigin):该方法用于向targetWindow中装载的HTML文档发送消息,只要先获取装载该文档的window对象即可。
接收其他窗口发送过来的消息则靠的是window对象提供的如下事件监听器属性。
onmessage:这是一个事件监听器属性,该事件监听器属性是一个形如functon(event){}的函数。
onmessage所指定的事件监听器函数中声明了一个event形参,这个event形参是一个MessageEvent对象。
MessageEent提供了如下属性:
data:该属性返回消息传递所交换的信息。
origin:该属性返回发送该消息的源域名。
lastEventId:该属性返回发送该消息的事件ID。
source:该属性返回发送该消息的窗口。
通过上面介绍可以发现,跨文档消息传递时发送消息的文档只要两步即可。
1:获取将要发送消息的目标窗口对于的window对象。
2:调用目标窗口的window对象的postMessage(any message)方法发送消息。
接收其他文档的消息也只需要两步即可。
1:为window的onmessage事件绑定事件监听器。
2:在事件监听器函数中通过event形参获得需要交换的数据。
18.1.2 跨文档消息传递示例
脚本代码:
var send = function()
{
//打开一个新窗口
var targetWin = window.open(‘http://localhost:8888/target/target.html‘,‘_blank‘,‘width=400,height=300‘);
//等该窗口装载完成时,向该窗口发送消息
targetWin.onload = function()
{
//向http://localhost:8888/target发送消息
targetWin.postMessage(document.getElementById("msg").value,"http://localhost:8888/target");
}
}
//通过onmessage监听器监听其他窗口发送过来的消息
window.onmessage = function(ev)
{
//忽略来自其他域名的跨文档消息(只接收http://localhost:8888的消息)
if(ev.origin != "http://localhost:8888")
{
return;
}
var show = document.getElementById("show");
//显示消息
show.innerHTML += (ev.origin + "传来了消息:" + ev.data + "<br/>");
};
html代码:
消息:<input type="text" id="msg" name="msg" />
<button onclick="send();">发送消息</button>
<div id="show"></div>
9月9号=》461页-465页