`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 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部