From b040ac6373b65d9c1836f1fe3e5a0d45b9ce8878 Mon Sep 17 00:00:00 2001 From: tamaina Date: Fri, 27 Sep 2019 05:12:56 +0900 Subject: [PATCH] PWA Fix (#5432) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * PWA Fix * SWが/api/へのリクエストに関与しないように * fix semicolon * Update base.pug * Update base.pug --- assets/icons/512.png | Bin 0 -> 10231 bytes assets/icons/icon.svg | 91 ++++++++++++++++++++++++++++++++++ src/client/app/boot.js | 13 ++--- src/client/app/sw.js | 46 +++++++++++++++-- src/server/web/views/base.pug | 2 + 5 files changed, 140 insertions(+), 12 deletions(-) create mode 100644 assets/icons/512.png create mode 100644 assets/icons/icon.svg diff --git a/assets/icons/512.png b/assets/icons/512.png new file mode 100644 index 0000000000000000000000000000000000000000..66abba2d0d39af63c816e1b9bb8a8f497fe01312 GIT binary patch literal 10231 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 + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/src/client/app/boot.js b/src/client/app/boot.js index 583cc4fc8b..c244050a54 100644 --- a/src/client/app/boot.js +++ b/src/client/app/boot.js @@ -98,15 +98,10 @@ // If mobile, insert the viewport meta tag if (isMobile) { - const meta = document.createElement('meta'); - meta.setAttribute('name', 'viewport'); - meta.setAttribute('content', - 'width=device-width,' + - 'initial-scale=1,' + - 'minimum-scale=1,' + - 'maximum-scale=1,' + - 'user-scalable=no'); - head.appendChild(meta); + const viewport = document.getElementsByName("viewport").item(0); + viewport.setAttribute('content', + `${viewport.getAttribute('content')},minimum-scale=1,maximum-scale=1,user-scalable=no`); + head.appendChild(viewport); } // Switch desktop or mobile version diff --git a/src/client/app/sw.js b/src/client/app/sw.js index 92f2ac8284..d080130e3d 100644 --- a/src/client/app/sw.js +++ b/src/client/app/sw.js @@ -4,13 +4,53 @@ import composeNotification from './common/scripts/compose-notification'; +// eslint-disable-next-line no-undef +const version = _VERSION_; +const cacheName = `mk-cache-${version}`; + +const apiUrl = `${location.origin}/api/`; + // インストールされたとき self.addEventListener('install', ev => { console.info('installed'); - ev.waitUntil(Promise.all([ - self.skipWaiting(), // Force activate - ])); + ev.waitUntil( + caches.open(cacheName) + .then(cache => { + return cache.addAll([ + "/", + `/assets/desktop.${version}.js`, + `/assets/mobile.${version}.js`, + "/assets/error.jpg" + ]); + }) + .then(() => self.skipWaiting()) + ); +}); + +self.addEventListener('activate', ev => { + ev.waitUntil( + caches.keys() + .then(cacheNames => Promise.all( + cacheNames + .filter((v) => v !== cacheName) + .map(name => caches.delete(name)) + )) + .then(() => self.clients.claim()) + ); +}); + +self.addEventListener('fetch', ev => { + if (ev.request.method !== 'GET' || ev.request.url.startsWith(apiUrl)) return; + ev.respondWith( + caches.match(ev.request) + .then(response => { + return response || fetch(ev.request); + }) + .catch(() => { + return caches.match("/"); + }) + ); }); // プッシュ通知を受け取ったとき diff --git a/src/server/web/views/base.pug b/src/server/web/views/base.pug index 16bea853e7..97c7a87e1b 100644 --- a/src/server/web/views/base.pug +++ b/src/server/web/views/base.pug @@ -12,7 +12,9 @@ html meta(name='referrer' content='origin') meta(name='theme-color' content='#105779') meta(property='og:site_name' content= instanceName || 'Misskey') + meta(name='viewport' content='width=device-width, initial-scale=1') link(rel='icon' href= icon || '/favicon.ico') + link(rel='apple-touch-icon' href= icon || '/apple-touch-icon.png') link(rel='manifest' href='/manifest.json') title