1const VERSION = '1.0.0'; 2 3// sw.js - å¤çææå¾çç½ç»è¯·æ± 4const DOMAINS_MAP = { 5 'nwzimg.wezhan.cn': 'img.wanwang.xin', 6 'nwzimg.wezhan.net': 'img.website.xin', 7 'nwzimg.wezhan.hk': 'img.website.xin', 8 'temporary-cdn.wezhan.net': 'img.website.xin', 9 'test.env.wezhan.cn': 'img-test.wanwang.xin' 10}; 11 12const DOMAIN_REGEX = /(nwzimg\.wezhan\.(?:cn|net|hk)|temporary-cdn\.wezhan\.net|test\.env\.wezhan\.cn)/i; 13 14// æ¥æ¶é ç½® 15self.addEventListener('message', (event) => { 16 if (event.data.type === 'CONFIG') { 17 Object.assign(DOMAINS_MAP, event.data.domainsMap); 18 console.log('SWé ç½®å·²æ´æ°'); 19 } 20}); 21 22// æ¦æªå¾çè¯·æ± 23self.addEventListener('fetch', (event) => { 24 const url = event.request.url; 25 26 // åªå¤çå¾çè¯·æ± 27 if (isImageRequest(event.request)) { 28 if (DOMAIN_REGEX.test(url)) { 29 event.respondWith(handleImageRequest(event.request)); 30 } 31 } 32}); 33 34// 夿å¾çè¯·æ± 35function isImageRequest(request) { 36 const url = request.url; 37 const accept = request.headers.get('Accept') || ''; 38 39 // å¾çæ©å±å 40 if (/\.(jpg|jpeg|png|gif|webp|bmp|svg|ico|avif)(\?.*)?$/i.test(url)) { 41 return true; 42 } 43 44 // Accept头 45 if (accept.includes('image/')) { 46 return true; 47 } 48 49 return false; 50} 51 52// å¤çå¾çè¯·æ± 53async function handleImageRequest(request) { 54 const originalUrl = request.url; 55 56 try { 57 // å°è¯åå§è¯·æ± 58 const response = await fetch(request); 59 if (response.ok) return response; 60 61 throw new Error(`HTTP ${response.status}`); 62 63 } catch (error) { 64 console.log('å¾çå 载失败ï¼å°è¯æ¿æ¢:', originalUrl); 65 66 // æ¿æ¢åå 67 const newUrl = originalUrl.replace(DOMAIN_REGEX, (match) => { 68 return DOMAINS_MAP[match.toLowerCase()] || match; 69 }); 70 71 if (newUrl === originalUrl) { 72 return fetch(request); 73 } 74 75 // ç¨æ°URLéè¯ 76 try { 77 const newResponse = await fetch(newUrl, { 78 mode: 'cors', 79 credentials: 'omit' 80 }); 81 82 if (newResponse.ok) { 83 return newResponse; 84 } 85 } catch (e) { 86 console.log('éè¯å¤±è´¥'); 87 } 88 89 return fetch(request); 90 } 91} 92 93self.addEventListener('install', () => self.skipWaiting()); 94self.addEventListener('activate', (event) => event.waitUntil(clients.claim()));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.