用HTML5里的window.postMessage在两个网页间传递数据

估计很少人知道HTML5 APIS里有一个 window.postMessage  API。window.postMessage的功能是允许程序员跨域在两个窗口/frames间发送数据信息。基本上,它就像是跨域的AJAX,但不是浏览器跟服务器之间交互,而是在两个客户端之间通信。让我们来看一下window.postMessage是如何工作的。除了IE6、IE7之外的所有浏览器都支持这个功能。


原文参见:http://www.webhek.com/window-postmessage-api/


当使用 `window.postMessage()` 向同一窗口发送多个消息时,您可以使用回调函数来处理返回值。以下是一种可能的解决方案: 1. 在发送消息时,为每个消息分配一个唯一的标识符,并将该标识符作为消息的一部分发送。 2. 在接收到响应消息时,检查消息的标识符,并将响应值与标识符相关联。 3. 当您需要使用返回值时,您可以通过标识符获取响应值。 4. 在发送消息时,除了消息本身之外,还可以指定一个回调函数。当接收到响应消息时,调用回调函数,并将响应值作为参数传递。 以下是一个示例代码: ```javascript // 定义一个计数器,用于为每个消息分配唯一的标识符 let messageId = 0; // 定义一个对象,用于存储每个消息的响应值 const responseMap = {}; // 定义一个函数,用于发送消息并指定回调函数 function sendMessageWithCallback(message, callback) { // 为消息分配唯一的标识符 const id = ++messageId; // 将标识符作为消息的一部分发送 const data = { id, message }; window.postMessage(data, '*'); // 将回调函数与标识符相关联 responseMap[id] = callback; } // 在窗口接收到消息时,检查消息的标识符,并调用相关的回调函数 window.addEventListener('message', event => { const { id, message } = event.data; // 如果消息有标识符,则调用相关的回调函数 if (id != null && responseMap[id]) { const callback = responseMap[id]; delete responseMap[id]; callback(message); } }); ``` 使用上述代码,您可以通过以下方式发送消息并指定回调函数: ```javascript sendMessageWithCallback('hello', response => { console.log(response); }); ``` 当接收到响应消息时,代码将自动调用回调函数,并将响应值作为参数传递给它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值