実現したいこと
ServiceWorkerによるオフラインでのmp3ファイルのキャッシュの読み込みを実現したい
前提
ServiceWorkerによってキャッシュの読み込みは成功しました。
しかしオフラインの状態では、
mp3ファイルのキャッシュの読み込みがエラーになります。
mp3以外のファイルならキャッシュの読み込みは成功します。
発生している問題・エラーメッセージ
The FetchEvent for "<URL>" resulted in a network error response: the promise was rejected. ---------------------------------------------- Uncaught (in promise) TypeError: Failed to fetch at service-worker.js:33 (匿名) @ service-worker.js:33 ---------------------------------------------- GET https://xxxxxxxx.com/sound/xxxxxxxx.mp3 net::ERR_FAILED ---------------------------------------------- Uncaught (in promise) DOMException: Failed to load because no supported source was found.
該当のソースコード
javascript
1 2self.addEventListener('fetch', (event) => { 3 4 event.respondWith( 5 caches.match(event.request) 6 .then((response) => { 7 8 if (response) { 9 return response; 10 } 11 12 let fetchRequest = event.request.clone(); 13 14 return fetch(fetchRequest) 15 .then((response) => { 16 if (!response || response.status !== 200 || response.type !== 'basic') { 17 return response; 18 } 19 20 let responseToCache = response.clone(); 21 22 caches.open(CACHE_NAME) 23 .then((cache) => { 24 cache.put(event.request, responseToCache); 25 }); 26 27 return response; 28 }); 29 }) 30 ); 31});
ソースコード
javascript
1//service-worker.js 2 3var CACHE_VERSION = 'v.1'; 4var CACHE_NAME = 'XXXXXXXX'; 5var CASHE_FILES = [ 6'./index.html', 7'./css/xxxxxxxx.css', 8'./img/xxxxxxxx.svg', 9'./js/xxxxxxxx.js', 10'./sound/xxxxxxxx.mp3' 11]; 12 13self.addEventListener('install', function(e) { 14 e.waitUntil( 15 // キャッシュの登録 16 caches.open(CACHE_NAME) 17 .then(function(cache) { 18 return cache.addAll(CASHE_FILES); 19 }) 20 ); 21}); 22 23self.addEventListener('fetch', (event) => { 24 25 event.respondWith( 26 caches.match(event.request) 27 .then((response) => { 28 29 if (response) { 30 return response; 31 } 32 33 let fetchRequest = event.request.clone(); 34 35 return fetch(fetchRequest) 36 .then((response) => { 37 if (!response || response.status !== 200 || response.type !== 'basic') { 38 return response; 39 } 40 41 let responseToCache = response.clone(); 42 43 caches.open(CACHE_NAME) 44 .then((cache) => { 45 cache.put(event.request, responseToCache); 46 }); 47 48 return response; 49 }); 50 }) 51 ); 52});
試したこと
CASHE_FILES に以下を付加しました。
結果はキャッシュの読み込みがエラーになりました。
jjavascript
1.map(path => new URL(path, registration.scope).pathname);
補足情報(FW/ツールのバージョンなど)
ServiceWorkerの動作確認は以下です。
chrome
バージョン: 114.0.5735.134

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/06/24 08:28