demo · v139
Tab Presence Board
A SharedWorker tracks every connected tab and broadcasts join/leave events and messages. Open this page in multiple tabs. In Chrome 139+ with extendedLifetime: true, the worker keeps running even after every tab closes — reopen the page and the worker is still there.
Worker alive — uptime:
0s
Connected tabs
—
Message log
SharedWorker code
const worker = new SharedWorker(URL.createObjectURL(new Blob([`
const ports = new Map();
let nextId = 1;
onconnect = ({ports: [port]}) => {
const id = nextId++;
ports.set(id, port);
port.postMessage({type:'id', id});
broadcast({type:'join', id, total: ports.size});
port.onmessage = ({data}) => {
if(data.type==='leave') {
ports.delete(id);
broadcast({type:'leave', id, total: ports.size});
} else if(data.type==='msg') {
broadcast({type:'msg', from:id, text:data.text});
} else if(data.type==='ping') {
broadcast({type:'tick', uptime: Date.now() - started});
}
};
};
function broadcast(msg){ ports.forEach(p => p.postMessage(msg)); }
const started = Date.now();
setInterval(() => broadcast({type:'tick', uptime: Date.now() - started}), 1000);
`], {type: 'text/javascript'})), { extendedLifetime: true });