importScripts("/speculation-rules/prerender/resources/utils.js"); const params = new URLSearchParams(location.search); const uid = params.get('uid'); const bc = new PrerenderChannel('navigation-channel', uid); bc.onmessage = async e => { const data = JSON.parse(e.data); const navigationUrl = data.navigationUrl; const clientUrl = data.clientUrl; const respondTo = data.respondTo; const clients = await self.clients.matchAll(); const client = clients.find(c => c.url == clientUrl); if (!client) { const bc = new PrerenderChannel(respondTo, uid); bc.postMessage('Client was not found'); bc.close(); return; } let result; try { await client.navigate(navigationUrl); result = 'navigate() succeeded'; } catch (e) { if (e instanceof TypeError) { result = 'navigate() failed with TypeError'; } else { result = 'navigate() failed with unknown error'; } } finally { const bc = new PrerenderChannel(respondTo, uid); bc.postMessage(result); bc.close(); } };