But… that only affects new tabs (or refreshes).

You need to claim existing tabs separately.

self.addEventListener('install', (e)=> {
  /* ...do stuff to get ready... */

  self.skipWaiting(); // <= get new tabs
  clients.claim(); // <= + existing tabs
});