Source code

Revision control

Copy as Markdown

Other Tools

self.addEventListener('install', e => self.skipWaiting());
self.addEventListener('activate', e => e.waitUntil(self.clients.claim()));
self.addEventListener('message', event => {
event.waitUntil(async function() {
let logs = [];
logs.push("received message");
const target_url = event.data.url;
const port = event.data.port;
try {
const clients = await self.clients.matchAll({type: 'window'});
logs.push(`found ${clients.length} clients`);
for (const client of clients) {
logs.push(`navigating client ${client.id} to ${target_url}`);
try {
const result = await client.navigate(target_url);
if (result === null) {
logs.push("navigate resolved to null");
port.postMessage({result: 'failure', error: 'null', logs: logs});
} else {
logs.push("navigate resolved");
port.postMessage({result: 'success', logs: logs});
}
} catch (e) {
logs.push(`navigate rejected: ${e.name} - ${e.message}`);
port.postMessage({result: 'failure', error: e.name, logs: logs});
}
}
if (clients.length === 0) {
port.postMessage({result: 'no_clients', logs: logs});
}
} catch (err) {
logs.push(`matchAll failed: ${err.message}`);
port.postMessage({result: 'error', error: err.name, logs: logs});
}
}());
});