windowclient-navigate-worker.js (1039B)
1 importScripts("/speculation-rules/prerender/resources/utils.js"); 2 3 const params = new URLSearchParams(location.search); 4 const uid = params.get('uid'); 5 6 const bc = new PrerenderChannel('navigation-channel', uid); 7 8 bc.onmessage = async e => { 9 const data = JSON.parse(e.data); 10 const navigationUrl = data.navigationUrl; 11 const clientUrl = data.clientUrl; 12 const respondTo = data.respondTo; 13 14 const clients = await self.clients.matchAll(); 15 const client = clients.find(c => c.url == clientUrl); 16 if (!client) { 17 const bc = new PrerenderChannel(respondTo, uid); 18 bc.postMessage('Client was not found'); 19 bc.close(); 20 return; 21 } 22 23 let result; 24 try { 25 await client.navigate(navigationUrl); 26 result = 'navigate() succeeded'; 27 } catch (e) { 28 if (e instanceof TypeError) { 29 result = 'navigate() failed with TypeError'; 30 } else { 31 result = 'navigate() failed with unknown error'; 32 } 33 } finally { 34 const bc = new PrerenderChannel(respondTo, uid); 35 bc.postMessage(result); 36 bc.close(); 37 } 38 };