# MsgBus **Repository Path**: hejsky/msg-bus ## Basic Information - **Project Name**: MsgBus - **Description**: 页面之间通信,集成7种通信的封装逻辑 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-08-19 - **Last Updated**: 2026-08-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # iframe / 标签页通信统一封装 - 完整说明文档 > 插件文件:`plugins/messaging.js` > 支持模式:7 种通信策略可切换 > 浏览器兼容:IE9+ 至现代浏览器全覆盖 --- ## 目录 - [一、7 种通信方式总览](#一7-种通信方式总览) - [二、iframe 场景 vs 独立页面场景](#二iframe-场景-vs-独立页面场景) - [三、统一 API 完整说明](#三统一-api-完整说明) - [四、各通信方式详细说明](#四各通信方式详细说明) - [1. postMessage](#1-postmessage) - [2. broadcast (BroadcastChannel)](#2-broadcast-broadcastchannel) - [3. storage (localStorage 事件)](#3-storage-localstorage-事件) - [4. customEvent (CustomEvent)](#4-customevent-customevent) - [5. sharedWorker (SharedWorker)](#5-sharedworker-sharedworker) - [6. serviceWorker (ServiceWorker)](#6-serviceworker-serviceworker) - [7. messageChannel (MessageChannel)](#7-messagechannel-messagechannel) - [五、安全机制](#五安全机制) - [六、兼容性与降级机制](#六兼容性与降级机制) - [七、资源管理与生命周期](#七资源管理与生命周期) - [八、选型决策树](#八选型决策树) - [九、目录结构](#九目录结构) - [十、快速上手](#十快速上手) --- ## 一、7 种通信方式总览 | # | 模式 | 同源/跨域 | 需父页面中转 | 最小兼容 | 中转机制 | 适用场景 | |---|------|:---:|:---:|------|--------|--------| | 1 | `postMessage` | 跨域✓ | 是 | IE8+ | 父页面 `postMessage` | 跨域 iframe 通信 | | 2 | `broadcast` | 同源 | 否 | Safari 15.4+ | BroadcastChannel | 同源首选(API 最简) | | 3 | `storage` | 同源 | 否 | IE9+ | localStorage 事件 | 兼容老浏览器 | | 4 | `customEvent` | 同源 | 是 | IE9+ | DOM CustomEvent | 同源高频(无序列化) | | 5 | `sharedWorker` | 同源 | 否 | Safari 16+ | SharedWorker 线程 | 多标签页 + 后台逻辑 | | 6 | `serviceWorker` | 同源 | 否 | Safari 11.1+ | SW 代理 | PWA / 离线通信 | | 7 | `messageChannel` | 同源 | 握手阶段 | IE10+ | MessageChannel 端口 | 高频点对点专用通道 | ### 通信架构对比 ``` 需父页面中转(3种): postMessage: page2 ──► home(父) ──转发──► page1 customEvent: page2 ──► home(父) ──转发──► page1 messageChannel: page2 ──握手──► home ──给 port2 ──► page2 与 page1 直连 点对点(4种,不依赖父页面): broadcast: page2 ──直接广播──► page1(浏览器内置) storage: page2 ──写 localStorage ──► storage 事件 ──► page1 sharedWorker: page2 ──► Worker 线程 ──转发──► page1 serviceWorker: page2 ──► SW 代理 ──转发──► page1 ``` --- ## 二、iframe 场景 vs 独立页面场景 ### 场景 A:iframe 架构(父页面 + 子 iframe) ``` home.html (父页面) ├──