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 });

see also