Skip to content

Instantly share code, notes, and snippets.

@maanimis
Created October 3, 2025 06:37
Show Gist options
  • Select an option

  • Save maanimis/bb7e0f80b9c745bbbd9ff56b745bdece to your computer and use it in GitHub Desktop.

Select an option

Save maanimis/bb7e0f80b9c745bbbd9ff56b745bdece to your computer and use it in GitHub Desktop.
const CACHE_NAME = 'my-cache-v1';
// هنگام نصب Service Worker، می‌تونیم فایل‌های اولیه رو کش کنیم
self.addEventListener('install', (event) => {
console.log('[Service Worker] Installing...');
event.waitUntil(
caches.open(CACHE_NAME).then((cache) => {
console.log('[Service Worker] Pre-caching some assets');
return cache.addAll([
'/', // index.html
'/style.css',
'/script.js'
]);
})
);
});
// فعال شدن Service Worker
self.addEventListener('activate', (event) => {
console.log('[Service Worker] Activated');
return self.clients.claim(); // کنترل صفحات موجود
});
// Intercept همه درخواست‌های fetch
self.addEventListener('fetch', (event) => {
console.log('[Service Worker] Fetch intercepted:', event.request.url);
// مثال: تغییر درخواست یا اضافه کردن header
const modifiedRequest = new Request(event.request, {
headers: { ...event.request.headers, 'X-Custom-Header': 'MyValue' }
});
// تلاش برای پاسخ از کش اول
event.respondWith(
caches.match(event.request).then((cachedResponse) => {
if (cachedResponse) {
console.log('[Service Worker] Returning cached response for', event.request.url);
return cachedResponse;
}
// اگر در کش نبود، fetch واقعی انجام بده
return fetch(modifiedRequest).then((networkResponse) => {
// ذخیره پاسخ در کش
return caches.open(CACHE_NAME).then((cache) => {
cache.put(event.request, networkResponse.clone());
return networkResponse;
});
}).catch(() => {
// fallback اگر اینترنت نبود
return new Response('Offline or network error', { status: 503 });
});
})
);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment