Add caching service worker

TODO: Add a build step that automatically caches all posts as well
Signed-off-by: Harsh Shandilya <msfjarvis@gmail.com>
This commit is contained in:
Harsh Shandilya 2019-09-11 21:04:48 +05:30
parent 7c46a25ae6
commit 8295277cba
2 changed files with 51 additions and 0 deletions

38
static/service-worker.js Normal file
View File

@ -0,0 +1,38 @@
const cacheName = 'cache-v1';
const precacheResources = [
'/',
'/posts/',
'index.html',
'/bundle.min.js',
'/main.min.css',
'/fonts/Inter-UI-Regular.woff2',
'/fonts/Inter-UI-Bold.woff2',
'/fonts/Inter-UI-Regular.woff',
'/fonts/Inter-UI-Bold.woff',
];
self.addEventListener('install', event => {
console.log('Service worker install event!');
event.waitUntil(
caches.open(cacheName)
.then(cache => {
return cache.addAll(precacheResources);
})
);
});
self.addEventListener('activate', event => {
console.log('Service worker activate event!');
});
self.addEventListener('fetch', event => {
console.log('Fetch intercepted for:', event.request.url);
event.respondWith(caches.match(event.request)
.then(cachedResponse => {
if (cachedResponse) {
return cachedResponse;
}
return fetch(event.request);
})
);
});

View File

@ -6,6 +6,19 @@
<meta name="keywords" content="{{ .Site.Params.keywords }}" />
<meta name="robots" content="noodp" />
<link rel="canonical" href="{{ .Permalink }}" />
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function () {
navigator.serviceWorker.register('service-worker.js')
.then(reg => {
console.log('Service worker registered!', reg);
})
.catch(err => {
console.log('Service worker registration failed: ', err);
});
});
}
</script>
{{ block "title" . }}
<title>