self.addEventListener('fetch', function (event) { if (/\.jpg$/.test(event.request.url)) { event.respondWith( newResponse('<p>This is a response that comes from your Service Worker!</p>', { header: 'Content-Type': 'text/html' }) ) } })
Service Worker 生命周期
前文说过,只有当 Service Worker 安装完成并且用户刷新了页面或者跳转到网站的其他页面时,Service Worker 才会激活并开始拦截请求。
1 2 3
self.addEventListener('install', function (event) { event.waitUntil(self.skipWaiting()) })
skipWaiting() 函数强制等待中的 Service Worker 成为激活的 Service Worker。该函数还可以与 self.clients.claim() 一起使用,以确保底层 Service Worker 的更新立即生效。
1 2 3
self.addEventListener('activate', function (event) { event.waitUntil(self.clients.claim()) })
self.addEventListener('fetch', function (event) { if (/\.jpg$|.png$/.test(event.request.url)) { var supportsWebp = false if (event.request.headers.has(accept)) { supportsWebp = event.request.headers.get('accept').includes('webp') }
if (supportsWebp) { var req = event.request.clone()
var returnUrl = req.url.substr(0, req.url.lastIndexOf('.')) + '.webp'