PageSourceSearch

https://cdna.sevb.com/ServiceWorker.js?v=1

js sevb.com collected 2026-10-03 18:05:50 UTC 2,561 bytes, 94 lines download raw bytes

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.