v148 · Web Workers · Android
Shared State Board
A multi-tab shared dashboard using SharedWorker. The worker maintains online users, a shared clipboard, a broadcast counter, and a live chat — all synchronized across every tab that's connected. On Chrome 148+ this also works on Android.
Online users
0 connected- No users yet
Broadcast counter
shared across all tabsShared clipboard
all tabs see itLive chat
broadcast to all tabsConnection log
BroadcastChannel fallback
SharedWorker isn't available here. BroadcastChannel provides similar cross-tab messaging without a persistent worker. No shared state — just one-shot broadcasts.
Open a second tab to see increments broadcast in real time
The SharedWorker pattern
// In every tab (page.js):
const worker = new SharedWorker('./worker.js');
worker.port.addEventListener('message', (e) => {
const { type, ...payload } = e.data;
switch (type) {
case 'COUNTER': updateCounter(payload.counter); break;
case 'NEW_MSG': appendMessage(payload.msg); break;
case 'USER_JOINED': updateUserList(payload.users); break;
// …
}
});
worker.port.start();
// Send events:
worker.port.postMessage({ type: 'INCREMENT' });
worker.port.postMessage({ type: 'SEND_MSG', text: 'Hello!' });
// In worker.js — all ports (tabs) share a single execution context:
const ports = new Map();
let counter = 0;
self.addEventListener('connect', (event) => {
const port = event.ports[0];
// … store port, handle messages, broadcast to all other ports
});
Chrome 148 enables this on Android — previously SharedWorker was silently unavailable on Chrome for Android. The fix aligns Android with desktop.
see also
implementation reference
Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗