Семичев Олег
if (navigator.serviceWorker) {}
navigator.serviceWorker.register('service-worker.js')
navigator.serviceWorker
.register('service-worker.js', { scope: './' })
.then (function() { console.log('oh, yeah!) })
.catch(function() { console.log('oh, nooo!) });
this.addEventListener('install', function(event) {
// here we'll cache stuff
});
this.addEventListener('install', function(event) {
event.waitUntil(
// we'll cache here for sure
);
});
У event так же существует метод
.skipWaiting(),
который просто немедленно делает воркер активным
this.addEventListener('install', function(event) {
event.waitUntil(
caches
.open('v1')
.then(function(cache) {
return cache.addAll([
'/index.html',
'/style.css',
...
]);
});
);
})
Тут можно почитать о
caches (CacheStorage) и
cache
this.addEventListener('fetch', function(event) {
event.respondWith(
// magic goes here
);
});
this.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request);
);
});
...
event.respondWith(
caches
.match(event.request)
.catch(function() {
return fetch(event.request);
});
);
...
Тут можно почитать о
Fetch API и
fetch
...
return fetch(event.request)
.then(function(res) {
return caches
.open('v1')
.then(function(cache) {
cache.put(event.request, res.clone());
return res;
});
});
...
...
return fetch(event.request)
.then(function(res) {
return caches
.open('v1')
.then(function(cache) {
cache.put(event.request, res.clone());
return res;
})
})
.catch(function() {
return caches.match('placeholder.jpg');
});
...
this.addEventListener('fetch', function(event) {
event.respondWith(
caches
.match(event.request)
.catch(function() {
return fetch(event.request)
.then(function(res) {
return caches
.open('v1')
.then(function(cache) {
cache.put(event.request, res.clone());
return res;
})
})
.catch(function() {
return caches.match('placeholder.jpg');
});
})
);
});
this.addEventListener('install', function(event) {
event.waitUntil(
caches
.open('v2') // <========
.then(function(cache) {
return cache.addAll([ ... ]);
});
);
});
Не забывайте поменять версию кэша на актуальную
this.addEventListener('activate', function(event) {
var safeList = ['v2'];
event.waitUntil(
// delete old caches
);
});
caches
.keys()
.then(function(cacheKeys) {
return Promise.all(
cacheKeys
.filter(function (key) {
return safeList.indexOf(key) < 0;
})
.map(function (key) {
return caches.delete(key);
});
)
});
Тут можно почитать о
caches.keys()