<!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');
}
})()