`title: Service Worker 与 MessageChannel 双向协作``categories: Web 开发/前端/数据管理``keywords: Service Worker,MessageChannel,消息,双向通信,缓存``description: 使用 MessageChannel 进行页面与 Service Worker 的双向通信,传递控制消息与分块数据,协调缓存与持久化任务。`初始化通道async function connectSW() { const reg = await navigator.serviceWorker.ready; const ch = new MessageChannel(); navigator.serviceWorker.controller.postMessage({ type: 'connect' }, [ch.port2]); ch.port1.onmessage = (e) => { /* 处理 SW 回传消息 */ }; return ch.port1; } 分块发送function sendChunks(port, id, chunks) { for (const c of chunks) { port.postMessage({ type: 'chunk', id, data: c }, [c.buffer]); } port.postMessage({ type: 'end', id }); } SW 侧接收self.addEventListener('message', (e) => { const data = e.data; if (data && data.type === 'connect' && e.ports && e.ports[0]) { const port = e.ports[0]; port.onmessage = async (ev) => { const msg = ev.data; if (msg.type === 'chunk') { // 收到分块,可写入 Cache/OPFS } else if (msg.type === 'end') { // 合并与清理 } }; port.postMessage({ ok: true }); } });

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部