# PostmessageUtils **Repository Path**: Tianyu201809/postmessage-utils ## Basic Information - **Project Name**: PostmessageUtils - **Description**: 父子页面传递消息的工具库 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-27 - **Last Updated**: 2025-11-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PostMessageUtils 一个用于跨窗口通信的 PostMessage 工具库,支持消息发送、接收和响应机制。 ## 特性 - ✅ 简单易用的 API - ✅ 支持消息响应机制(类似请求-响应模式) - ✅ 自动消息 ID 管理 - ✅ 兼容 ES5,支持 IE9+ 及所有现代浏览器 - ✅ UMD 格式,支持多种模块系统 ## 安装 ### 浏览器环境 直接引入打包后的文件: ```html ``` ### Node.js 环境 ```javascript const PostMessageUtils = require('./dist/postmessage.umd.js'); ``` ### ES 模块 ```javascript import PostMessageUtils from './dist/postmessage.umd.js'; ``` ## API 文档 ### setReceiver(callback) 设置接收消息的回调函数。当收到消息时,会自动调用此回调。 **参数:** - `callback` (Function): 回调函数,接收三个参数: - `origin` (string): 消息来源的 origin - `messageData` (*): 消息数据 - `uid` (number): 消息的唯一标识符 **示例:** ```javascript PostMessageUtils.setReceiver(function(origin, messageData, uid) { console.log('收到来自 ' + origin + ' 的消息:', messageData); console.log('消息 ID:', uid); }); ``` ### sendMessage(targetWindow, targetOrigin, messageData, onResponse) 向目标窗口发送消息。 **参数:** - `targetWindow` (Window): 目标窗口对象(例如:`iframe.contentWindow` 或 `window.open()` 返回的窗口) - `targetOrigin` (string): 目标窗口的 origin(例如:`"https://example.com"` 或 `"*"`) - `messageData` (*): 要发送的消息数据(可以是任何可序列化的数据) - `onResponse` (Function, 可选): 当收到响应时的回调函数,接收响应数据作为参数 **示例:** ```javascript // 简单发送消息(不需要响应) var iframe = document.getElementById('myIframe'); PostMessageUtils.sendMessage( iframe.contentWindow, 'https://example.com', { type: 'greeting', text: 'Hello!' } ); // 发送消息并等待响应 PostMessageUtils.sendMessage( iframe.contentWindow, 'https://example.com', { type: 'request', action: 'getData' }, function(response) { console.log('收到响应:', response); } ); ``` ### respondToMessage(uid, responseMessage) 响应之前收到的消息。当收到一个需要响应的消息时,使用此方法发送响应。 **参数:** - `uid` (number): 原始消息的唯一标识符(在 `setReceiver` 回调中获取) - `responseMessage` (*): 响应数据(可以是任何可序列化的数据) **示例:** ```javascript PostMessageUtils.setReceiver(function(origin, messageData, uid) { if (messageData.type === 'request') { // 处理请求并发送响应 var response = { status: 'success', data: '处理结果' }; PostMessageUtils.respondToMessage(uid, response); } }); ``` ### receiveMessage(origin, payload, sourceWindow) 处理接收到的消息。通常由库内部自动调用,但也可以手动调用。 **参数:** - `origin` (string): 消息来源的 origin - `payload` (Object): 消息负载对象 - `sourceWindow` (Window): 来源窗口对象 ## 使用示例 ### 示例 1: 基本消息发送和接收 **父页面 (parent.html):** ```html