From f76d2bf8803de2acbb59564fbd6f779a79b892c1 Mon Sep 17 00:00:00 2001 From: tobiichi3227 Date: Thu, 7 Dec 2023 22:53:51 +0800 Subject: [PATCH] fix: offline cache failed Co-authored-by: LifeAdventurer --- fortune_generator/fortune.js | 36 +++++++++++------- fortune_generator/service-worker.js | 59 ++++++++++++++--------------- 2 files changed, 51 insertions(+), 44 deletions(-) diff --git a/fortune_generator/fortune.js b/fortune_generator/fortune.js index 434a293..9b0adfb 100644 --- a/fortune_generator/fortune.js +++ b/fortune_generator/fortune.js @@ -1,19 +1,27 @@ let ip = null; -$.getJSON("https://api.ipify.org?format=json", function(data) { - ip = data.ip; -}) +fetch("https://api.ipify.org?format=json").then(response => { + if (response.ok) { + return response.json(); + } + + throw new Error("Network response was not ok."); +}).then(res => { + ip = res.ip; + +}).catch(err => { + if ('caches' in window) { + caches.match('https://api.ipify.org?format=json').then(response => { + if (response) { + return response.json(); + } + }).then(data => { + if (ip === null && data !== undefined) { + ip = JSON.parse(data).ip; + } + }); + } +}); -if ('caches' in window) { - caches.match('https://api.ipify.org?format=json').then(response => { - if (response) { - return response.json(); - } - }).then(data => { - if (ip === null) { - ip = JSON.parse(data).ip; - } - }); -} let goodFortunes = []; let badFortunes = []; diff --git a/fortune_generator/service-worker.js b/fortune_generator/service-worker.js index ef61a1b..d358846 100644 --- a/fortune_generator/service-worker.js +++ b/fortune_generator/service-worker.js @@ -2,22 +2,26 @@ let pre_cache_file_version = 'pre-v1.0.0'; let auto_cache_file_version = 'auto-v1.0.0' const ASSETS = [ - 'generators/images/lifeadventurer-192x192.png', - 'generators/images/lifeadventurer-512x512.png', - 'generators/images/lifeadventurer-180x180.png', - 'generators/images/lifeadventurer-270x270.png', - 'generators/images/lifeadventurer.jpg', + '/generators/images/lifeadventurer-192x192.png', + '/generators/images/lifeadventurer-512x512.png', + '/generators/images/lifeadventurer-180x180.png', + '/generators/images/lifeadventurer-270x270.png', + '/generators/images/lifeadventurer.jpg', 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css', 'https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js' ]; const NEED_UPDATE = [ - 'generators/fortune_generator/styles.css', - 'generators/fortune_generator/fortune.js', - 'generators/fortune_generator/matrix.js', - 'generators/fortune_generator/special.json', - 'generators/fortune_generator/fortune.json', + '/generators/fortune_generator/', + '/generators/fortune_generator/index.html', + '/generators/fortune_generator/styles.css', + '/generators/fortune_generator/fortune.js', + '/generators/fortune_generator/matrix.js', + '/generators/fortune_generator/special.json', + '/generators/fortune_generator/fortune.json', + '/generators/fortune_generator/manifest.json', + 'https://api.ipify.org/?format=json', ] /** @@ -45,7 +49,7 @@ let is_in_array = (str, array) => { path = str; // outside request } - return array.indexOf(array) > -1; + return array.indexOf(path) > -1; } // install @@ -55,7 +59,7 @@ self.addEventListener('install', event => { // pre cache files event.waitUntil( caches.open(pre_cache_file_version).then(cache => { - cache.addAll(ASSETS); + // cache.addAll(ASSETS); }) ); }); @@ -79,28 +83,23 @@ self.addEventListener('fetch', event => { // Cache only strategy event.respondWith( - caches.match(event.request) + caches.match(event.request.url) ); } else if (is_in_array(event.request.url, NEED_UPDATE)) { - // Cache then network strategy - event.respondWith( - caches.open(auto_cache_file_version).then(async cache => { - const res = await fetch(event.request); - cache.put(event.request, res.clone()); + fetch(event.request.url).then(async response => { + if (response.ok) { + const cache = await caches.open(auto_cache_file_version); + cache.put(event.request.url, response.clone()); + return response; + } - return res; + throw new Error("Network response was not ok."); + + }).catch(async error => { + const cache = await caches.open(auto_cache_file_version); + return cache.match(event.request.url); }) - ); - } else if (event.request.url.indexOf('https://api.ipify.org?format=json') > -1) { - fetch(event.request).then(async response => { - const cache = await caches.open(auto_cache_file_version); - cache.put(event.request.url, response.clone()); - return response; - - }).catch(async () => { - const cache = await caches.open(auto_cache_file_version); - return await cache.match(event.request); - }); + ) } }); \ No newline at end of file