progressive web app для опенкарт
Приложение не работает offline... Регистрация Service worker
window.addEventListener('load', async () => {
if ('serviceWorker' in navigator) {
try {
const reg = await navigator.serviceWorker.register('/service-worker.js')
console.log('Service worker register success', reg)
} catch (e) {
console.log('Service worker register fail')
}
}
})
Service-worker.js -
const staticCacheName = 's-app-v1.9'
const dynamicCacheName = 'd-app-v1.1'
const assetUrls = [
'./offline.html',
'./index.php',
'./contacts.php',
'./blog.php',
'catalog/view/theme/default/stylesheet/fonts.css',
'catalog/view/theme/default/stylesheet/main.css',
'catalog/view/javascript/slick/slick.css',
'catalog/view/javascript/common.js',
'catalog/view/javascript/slick/slick-theme.css',
'catalog/view/javascript/jquery/owl-carousel/owl.carousel.css',
'catalog/view/javascript/jquery/owl-carousel/owl.transitions.css',
'catalog/view/javascript/jquery/owl-carousel/owl.carousel.min.js',
'catalog/view/javascript/slick/slick.min.js',
'/image/catalog/LOGO.png'
]
self.addEventListener('install', async event => {
const cache = await caches.open(staticCacheName)
await cache.addAll(assetUrls)
})
self.addEventListener('activate', async event => {
const cacheNames = await caches.keys()
await Promise.all(
cacheNames
.filter(name => name !== staticCacheName)
.filter(name => name !== dynamicCacheName)
.map(name => caches.delete(name))
)
})
self.addEventListener('fetch', event => {
const {request} = event
const url = new URL(request.url)
if (url.origin === location.origin) {
event.respondWith(cacheFirst(request))
} else {
event.respondWith(networkFirst(request))
}
})
async function cacheFirst(request) {
const cached = await caches.match(request)
return cached ?? await fetch(request)
}
async function networkFirst(request) {
const cache = await caches.open(dynamicCacheName)
try {
const response = await fetch(request)
await cache.put(request, response.clone())
return response
} catch (e) {
const cached = await cache.match(request)
return cached ?? await caches.match('./offline.html')
}
}