v147 · Service Workers · Navigation
Reload Detector
Demonstrates how a Service Worker uses FetchEvent.request.isReloadNavigation to distinguish a user-triggered reload from a normal page navigation — enabling smarter cache strategies that bypass stale-while-revalidate on intentional reloads.
Checking Service Worker support…
Simulate different navigation types and see how a Service Worker would respond using isReloadNavigation.
cache strategy based on reload type
Service Worker decision table
navigation (HTML)
isReload → network-first (bypass cache)
navigation (HTML)
isNavigate → stale-while-revalidate
critical API endpoints
isReload → force fresh fetch
static assets (JS/CSS)
either → cache-first (long TTL)
user data (JSON)
isReload → network + update cache
service worker code
// service-worker.js (Chrome 147+)
self.addEventListener('fetch', event => {
const { request } = event;
if (request.mode === 'navigate') {
// isReloadNavigation: true for Ctrl+R, F5, location.reload()
// isHistoryNavigation: true for back/forward
if (request.isReloadNavigation) {
// User explicitly refreshed — bypass cache
event.respondWith(fetch(request));
} else {
// Normal navigation — serve from cache, revalidate
event.respondWith(
caches.match(request).then(cached =>
cached ?? fetch(request)
)
);
}
}
});