Created
October 13, 2016 20:49
-
-
Save tuxracer/c1d78ad07b5f73280e14d78b27eca3ab to your computer and use it in GitHub Desktop.
Revisions
-
tuxracer created this gist
Oct 13, 2016 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,47 @@ var version = 'app-v1'; var expectedCaches = [version]; self.oninstall = () => console.log('Installed version:', version); self.onfetch = (event) => { event.respondWith( // Check cache for request caches.match(event.request) .then((cachedResponse) => { // If we have a cached response return it immediately unless this is an API request. // For those we'll only fallback to a cached response as a last resort if (cachedResponse && cachedResponse.type !== 'error' && !event.request.url.match('/api|jsonp') ) { console.log('Returning cached response ' + event.request.url, cachedResponse); return cachedResponse; } // Try to make the request return fetch(event.request.clone()) .then((response) => { if (!response || response.status !== 200) { throw new Error('Invalid response ' + event.request.url); } return response.clone(); }) .then((response) => { const clonedRequest = event.request.clone(); const clonedResponse = response.clone(); // Cache the response caches.open(version).then((cache) => cache.put(clonedRequest, clonedResponse)); // Return the live response console.log("Returning live response for", event.request.url); return response; }, (err) => { // Fallback to cached response if request fails return cachedResponse; }); }) ); };