0

Это мой рабочий сервис:Service Worker не кэширует HTML-файл

'use strict'; 


const CACHE_VERSION = 1; 
let CURRENT_CACHES = { 
    offline: 'offline-v' + CACHE_VERSION 
}; 
const OFFLINE_URL = 'offline.html'; 

function createCacheBustedRequest(url) { 
    let request = new Request(url, {cache: 'reload'}); 

    if ('cache' in request) { 
    return request; 
    } 

    let bustedUrl = new URL(url, self.location.href); 
    bustedUrl.search += (bustedUrl.search ? '&' : '') + 'cachebust=' + Date.now(); 
    return new Request(bustedUrl); 
} 

self.addEventListener('install', event => { 
    event.waitUntil(

    fetch(createCacheBustedRequest(OFFLINE_URL)).then(function(response) { 
     return caches.open(CURRENT_CACHES.offline).then(function(cache) { 
     return cache.put(OFFLINE_URL, response); 
     }); 
    }) 
); 
}); 

self.addEventListener('activate', event => { 

    let expectedCacheNames = Object.keys(CURRENT_CACHES).map(function(key) { 
    return CURRENT_CACHES[key]; 
    }); 

    event.waitUntil(
    caches.keys().then(cacheNames => { 
     return Promise.all(
     cacheNames.map(cacheName => { 
      if (expectedCacheNames.indexOf(cacheName) === -1) { 

      console.log('Deleting out of date cache:', cacheName); 
      return caches.delete(cacheName); 
      } 
     }) 
    ); 
    }) 
); 
}); 

self.addEventListener('fetch', event => { 

    if (event.request.mode === 'navigate' || 
     (event.request.method === 'GET' && 
     event.request.headers.get('accept').includes('text/html'))) { 
    console.log('Handling fetch event for', event.request.url); 
    event.respondWith(
     fetch(createCacheBustedRequest(event.request.url)).catch(error => { 

     console.log('Fetch failed; returning offline page instead.', error); 
     return caches.match(OFFLINE_URL); 
     }) 
    ); 
    } 


}); 

Это стандарт форума кэша службы работника: https://googlechrome.github.io/samples/service-worker/custom-offline-page/

я не получаю сообщение об ошибке в консоли.

В Chrome Chrome добавление страницы на домашнюю страницу отлично работает (у меня есть манифест, который определяет значок и URL-адрес). Тем не менее, когда я выключаю связь по телефону, я получаю сообщение об ошибке:

Not Found 
The requested URL/offline.html was not found on this server. 

Как это исправить?

+0

Имеется ли файл 'offline.html'? – Marco

+0

Конечно. Файл существует и открывается нормально. Но он не кэшируется. –

ответ

0

Я думаю, что это так, как я настроил свои домены - я сопоставил свой/домен с моим/www-доменом. Я изменил const OFFLINE_URL = 'offline.html'; to const OFFLINE_URL = 'https://example.com/offline.html'; и это сработало. Использование абсолютного URL-адреса работает все время.

+0

Таким образом, на самом деле этого не было по адресу, который вы запрашивали: D – Marco

+0

LOL. Да. Вы были правы. –

Смежные вопросы