Преглед на файлове

Add ServiceWorker implementation

RobinLinus преди 6 години
родител
ревизия
2cd1798b15
променени са 2 файла, в които са добавени 43 реда и са изтрити 3 реда
  1. 9 3
      client/scripts/ui.js
  2. 34 0
      client/service-worker.js

+ 9 - 3
client/scripts/ui.js

@@ -399,7 +399,7 @@ class Notifications {
 
     _copyText(message, notification) {
         notification.close();
-        if(!document.copy(message)) return;
+        if (!document.copy(message)) return;
         this._notify('Copied text to clipboard');
     }
 
@@ -463,14 +463,20 @@ document.copy = text => {
 }
 
 
-if ('serviceWorker' in navigator && !window.iOS) {
-    // SW on iOS is buggy. see: https://stackoverflow.com/questions/18103103/failed-to-load-resource-plugin-handled-load-on-ios
+if ('serviceWorker' in navigator) {
     navigator.serviceWorker
         .register('/service-worker.js')
         .then(serviceWorker => {
             console.log('Service Worker registered');
             window.serviceWorker = serviceWorker
         });
+
+    // don't display install banner when installed
+    window.addEventListener('beforeinstallprompt', e => {
+        if (window.matchMedia('(display-mode: standalone)').matches) {
+            return event.preventDefault();
+        }
+    });
 }
 
 // Background Animation

+ 34 - 0
client/service-worker.js

@@ -0,0 +1,34 @@
+var CACHE_NAME = 'my-site-cache-v1';
+var urlsToCache = [
+  '/',
+  '/styles.css',
+  '/scripts/network.js',
+  '/scripts/ui.js',
+  '/sounds/blop.mp3'
+];
+
+self.addEventListener('install', function(event) {
+  // Perform install steps
+  event.waitUntil(
+    caches.open(CACHE_NAME)
+      .then(function(cache) {
+        console.log('Opened cache');
+        return cache.addAll(urlsToCache);
+      })
+  );
+});
+
+
+self.addEventListener('fetch', function(event) {
+  event.respondWith(
+    caches.match(event.request)
+      .then(function(response) {
+        // Cache hit - return response
+        if (response) {
+          return response;
+        }
+        return fetch(event.request);
+      }
+    )
+  );
+});