如果您关闭互联网并通过 Chrome 访问 YouTube,您可以看到此页面(前提是该站点之前已在此浏览器中至少加载过一次):
为此,您需要使用ServiceWorker。您还需要通过 HTTPS 公开您的站点 - Service Worker 出于安全原因需要这样做。
const CACHE_NAME = 'app_serviceworker_v_1',
cacheUrls = [
'/ru',
'/en',
'/css/style.css',
'/js/script.js'
]
// период обновления кэша - минута
const MAX_AGE = 60
self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(CACHE_NAME).then((cache) => {
return cache.addAll(cacheUrls)
})
)
})
self.addEventListener('fetch', (event) => {
event.respondWith(
caches.match(event.request).then((cachedResponse) => {
let
lastModified,
fetchRequest
// если ресурс есть в кэше
if (cachedResponse) {
lastModified = new Date(cachedResponse.headers.get('last-modified'))
if (lastModified && (Date.now() - lastModified.getTime()) > MAX_AGE) {
fetchRequest = event.request.clone()
return fetch(fetchRequest).then((response) => {
const responseClone = response.clone()
// при неудаче всегда можно выдать ресурс из кэша
if (!response || response.status !== 200) {
return cachedResponse
} else {
// обновляем кэш
caches.open(CACHE_NAME).then((cache) => {
cache.put(event.request, responseClone)
})
// возвращаем свежий ресурс
return response
}
}).catch(() => cachedResponse)
}
return cachedResponse
}
return fetch(event.request)
})
)
})