详情介绍

以下是Chrome浏览器跨标签通信机制应用示例解析:
1. 使用LocalStorage实现简单通信
- 操作步骤:在一个标签页执行 `localStorage.setItem('key', 'value')` →在另一个标签页通过 `localStorage.getItem('key')` 读取数据→无需网络请求即可共享信息。
- 示例场景:购物车功能→在商品页添加商品到LocalStorage→在结算页读取并展示商品列表。
2. 监听Storage事件捕捉数据变化
- 设置监听:在标签页执行 `window.addEventListener('storage', function(e) { console.log(e.newValue); })` →当其他标签页修改LocalStorage时触发事件→获取最新值。
- 注意事项:仅能捕获本域名下的Storage变化→不同浏览器窗口或隐身模式无法监听。
3. BroadcastChannel API实现实时通信
- 创建通信通道:在两个标签页分别执行 `const bc = new BroadcastChannel('chat')` →通过 `bc.postMessage('Hello')` 发送消息→对方标签页的 `bc.onmessage` 自动接收并处理。
- 适用场景:实时聊天、系统通知→支持多标签页同时接收消息。
4. PostMessage配合iframe跨域通信
- 父页面发送消息:在主页面执行 `document.getElementById('frameId').contentWindow.postMessage('data', 'https://target.com')` →向指定iframe发送数据。
- 子页面接收消息:在iframe内执行 `window.addEventListener('message', function(e) { if(e.origin === 'https://source.com') console.log(e.data); })` →验证来源后处理信息。
5. Cookies共享与限制
- 设置Cookie:通过 `document.cookie = 'name=value; path=/'` →所有同域标签页均可读取该Cookie。
- 局限性:无法存储大量数据→仅适合简单状态同步(如用户登录态)。
6. IndexedDB数据库共享
- 打开数据库:在标签页执行 `const db = indexedDB.open('test')` →通过事务读取或写入数据。
- 数据同步:多个标签页操作同一数据库→自动触发事件(如 `onsuccess`、`onerror`)→适合复杂数据存储(如离线应用)。
7. WebSockets实时双向通信
- 建立连接:在标签页执行 `const ws = new WebSocket('ws://example.com')` →通过 `ws.send('message')` 发送数据→其他标签页或服务器端均可接收。
- 典型应用:在线游戏、股票行情推送→需后端支持WebSocket协议。