Обратите внимание, что вы можете создать / использовать отдельный рабочий файл "audioWorker.js" из SW.js для запуска аудио-кэша приложений, потому что IMO его проще тестировать, а жизненный цикл SW довольно сложен и ориентирован на собственный кэш приложений. «реальных» URL-адресов, используемых приложением.
Также обратите внимание на несоответствие с допустимыми протоколами, используемыми в обычной реализации Service-Worker, которая перехватывает вызовы «fetch» - протокол blob, используемый браузером на ваших аудиоблоках, будет отклонен как недействительные URL-адреса реализацией browser.SW. Вы не можете просто передать URL-адрес своего блоба в обычный жизненный цикл ПО, потому что его URL начинается с 'blob: //'.
URL-адрес из audioBlob вполне подойдет, если вы решите НЕ использовать SW для кэша. Тем не менее, вы можете добавить суффикс mimeType ...
url = URL.createObjectURL(audio); // protocol of this is 'blob://'
wUrl = url +"?type=" + {$audio.blob.data.type};
console.log("SW CACH1 " +wUrl);
myCacheWorker.postMessage({ action: 'navigate', url: wUrl });
в cacheWorker, по сообщению, запись в кеш:
onmessage = function( e ){
switch( e.data.action ){
case 'navigate':
upcache(e.data.url).then(() => {
postMessage({done: 'done'});
});
break;
}}
//boiler plate cache write below from any example
var upcache = function( url ){
return caches.open($cname)
.then((openCache) => {
return fetch(fetchUrl).then(function(resp) {
if (!resp.ok) {
throw new TypeError('Bad response status');
}
return openCache.put(url, resp);
})
});
}