概述双向通信可用于任务分发与状态回传。本文给出最小实现。页面端建立通道async function connectSW() { const reg = await navigator.serviceWorker.ready; const mc = new MessageChannel(); reg.active.postMessage({ type: 'connect' }, [mc.port2]); mc.port1.onmessage = e => { console.log('result', e.data); }; mc.port1.postMessage({ type: 'batch', items: [1,2,3] }); } SW 端接入与分发let port; self.addEventListener('message', e => { if (e.data && e.data.type === 'connect' && e.ports && e.ports[0]) { port = e.ports[0]; port.onmessage = ev => { if (ev.data.type === 'batch') { const out = ev.data.items.map(x => x * 2); port.postMessage({ ok: true, out }); } }; } });

发表评论 取消回复