<!DOCTYPE html>
<html>

  <head>
  </head>

  <body>
    <h1>Check your Main Process Console and the Service Worker Console for the results</h1>
    <script src="script.js"></script>
  </body>

</html>
// sw.js
setInterval(async () => {
     const key = await crypto.subtle.generateKey({
        name: 'AES-GCM',
        length: 256
     },
     false,
     [ 'encrypt', 'decrypt' ]);

    const clients = await self.clients.matchAll();

    clients.forEach(client => {
        try {            
          client.postMessage(key);
        } catch (ex) {
            console.log('structure clone failure within worker');
            console.error(ex);
        }
    });

}, 5000);
(async function main() {
    await window.navigator.serviceWorker.register('sw.js');
    await window.navigator.serviceWorker.ready;
    const key = await crypto.subtle.generateKey({ 
        name: 'AES-GCM',
        length: 256,
    },
    false,
    [ 'encrypt', 'decrypt' ]);
    try {
        console.log(key);
        setTimeout(() => {
            window.navigator.serviceWorker.controller.postMessage(key);
            console.log('Structure clone succeeds from main thread');
        }, 3000)

    } catch (ex) {
        console.log(ex);
        console.log('this will never get hit');
    }
})()