Last active
April 4, 2017 16:12
-
-
Save romgrk/e967f4703848e4b02201b497b4440115 to your computer and use it in GitHub Desktop.
Caches everything
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 characters
| /* | |
| * main.js | |
| * Copyright (C) 2016 romgrk <romgrk@Romgrk-ARCH> | |
| * | |
| * Distributed under terms of the MIT license. | |
| */ | |
| 'use strict'; | |
| const serviceWorker = navigator.serviceWorker; | |
| serviceWorker.register('/sw.js') | |
| .then(registration => { | |
| console.log('SW done:', registration) | |
| }) | |
| .catch(err => { | |
| console.log('SW failed:', err) | |
| }) | |
| document.addEventListener('DOMContentLoaded', event => { | |
| sendToServiceWorker('Page loaded') | |
| .then(res => console.log(res)) | |
| .catch(err => console.log(err)) | |
| }) | |
| function sendToServiceWorker(message) { | |
| return new Promise((resolve, reject) => { | |
| var channel = new MessageChannel(); | |
| channel.port1.onmessage = event => { | |
| if (event.data.error) | |
| reject(event.data.error) | |
| else | |
| resolve(event.data) | |
| } | |
| serviceWorker.controller.postMessage(message, [channel.port2]) | |
| }) | |
| } | |
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 characters
| /* | |
| * sw.js | |
| * Copyright (C) 2016 romgrk <romgrk@Romgrk-ARCH> | |
| * | |
| * Distributed under terms of the MIT license. | |
| */ | |
| 'use strict'; | |
| const CACHE_NAME = 'cache-v1' | |
| const urls = [ | |
| 'file.txt' | |
| ] | |
| let counter = 0 | |
| self.addEventListener('install', (event) => { | |
| console.log('SW: installing'); | |
| event.waitUntil( | |
| caches.open(CACHE_NAME).then((cache) => { | |
| console.log('Cache opened'); | |
| return cache.addAll(urls) | |
| }) | |
| ) | |
| }) | |
| self.addEventListener('activate', (event) => { | |
| console.log('SW: activating'); | |
| }) | |
| self.addEventListener('fetch', event => { | |
| console.log('SW: fetch:', event); | |
| event.respondWith( | |
| caches.match(event.request).then(cachedResponse => { | |
| if (cachedResponse) { | |
| console.log('Cache match.'); | |
| const fetchRequest = event.request.clone(); | |
| fetch(fetchRequest).then(response => { | |
| if (!response || response.status !== 200 || response.type !== 'basic') { | |
| return; | |
| } | |
| console.log('Cache match -- recache'); | |
| caches.open(CACHE_NAME).then(cache => { | |
| cache.put(event.request, response); | |
| }); | |
| }) | |
| return cachedResponse; | |
| } | |
| console.log('Cache miss'); | |
| const fetchRequest = event.request.clone(); | |
| return fetch(fetchRequest).then(response => { | |
| if (!response || response.status !== 200 || response.type !== 'basic') { | |
| return response; | |
| } | |
| console.log('Cached'); | |
| const responseToCache = response.clone(); | |
| caches.open(CACHE_NAME).then(cache => { | |
| cache.put(event.request, responseToCache); | |
| }); | |
| return response; | |
| }) | |
| }) | |
| ) | |
| }) | |
| self.addEventListener('message', event => { | |
| console.log('SW: message:', event.data); | |
| if (event.ports.length) { | |
| var port = event.ports[0]; | |
| port.postMessage('Received.'); | |
| } | |
| }) | |
| function sendToAllClients(message) { | |
| clients.matchAll().then(clients => { | |
| clients.forEach(client => sendToClient(client, message)) | |
| }) | |
| } | |
| function sendToClient(client, message) { | |
| return new Promise((resolve, reject) => { | |
| var channel = new MessageChannel(); | |
| channel.port1.onmessage = event => { | |
| if (event.data.error) | |
| reject(event.data.error) | |
| else | |
| resolve(event.data) | |
| } | |
| client.postMessage(message, [channel.port2]) | |
| }) | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment