From cf64244b216ffee7589a2cc1ceec8185f0973609 Mon Sep 17 00:00:00 2001 From: M1ngdaXie <156019134+M1ngdaXie@users.noreply.github.com> Date: Fri, 27 Mar 2026 18:37:10 -0700 Subject: [PATCH] Add PWA support with service worker, manifest, and icons --- icons/icon-192.png | Bin 0 -> 2213 bytes icons/icon-512.png | Bin 0 -> 5630 bytes index.html | 14 +++++++++++--- manifest.json | 24 ++++++++++++++++++++++++ sw.js | 33 +++++++++++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 icons/icon-192.png create mode 100644 icons/icon-512.png create mode 100644 manifest.json create mode 100644 sw.js diff --git a/icons/icon-192.png b/icons/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..991ab686cd29a759d699b66f6deb359e23123a21 GIT binary patch literal 2213 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 + 梅子的成语填字 - + + +
@@ -158,7 +161,12 @@
- - + + + diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..f0562c3 --- /dev/null +++ b/manifest.json @@ -0,0 +1,24 @@ +{ + "name": "梅子的成语填字", + "short_name": "成语填字", + "description": "每天练习成语填字,越练越强!", + "start_url": "/", + "display": "standalone", + "background_color": "#1a1a2e", + "theme_color": "#1a1a2e", + "orientation": "portrait", + "icons": [ + { + "src": "icons/icon-192.png?v=3", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "icons/icon-512.png?v=3", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" + } + ] +} diff --git a/sw.js b/sw.js new file mode 100644 index 0000000..c2f8173 --- /dev/null +++ b/sw.js @@ -0,0 +1,33 @@ +const CACHE_NAME = 'chengyu-v1'; +const ASSETS = [ + '/', + '/index.html', + '/style.css', + '/app.js', + '/data.js', + '/manifest.json', + '/icons/icon-192.png', + '/icons/icon-512.png' +]; + +self.addEventListener('install', e => { + e.waitUntil( + caches.open(CACHE_NAME).then(cache => cache.addAll(ASSETS)) + ); + self.skipWaiting(); +}); + +self.addEventListener('activate', e => { + e.waitUntil( + caches.keys().then(keys => + Promise.all(keys.filter(k => k !== CACHE_NAME).map(k => caches.delete(k))) + ) + ); + self.clients.claim(); +}); + +self.addEventListener('fetch', e => { + e.respondWith( + caches.match(e.request).then(cached => cached || fetch(e.request)) + ); +});