Веб-страница не обновляется, если содержимое кэшируется в service worker
Привет, у меня есть веб-страница в PWA и файл service worker js. Я провел некоторое тестирование пользовательского интерфейса и обнаружил, что всякий раз, когда я делаю некоторые изменения в пользовательском интерфейсе, страница не будет отражать последние изменения.
Пока только я не перейду к очистке кэша в браузере Chrome на вкладке "приложение -> очистить хранилище" в "инструменте разработчиков", только последние изменения будут отражены в пользовательском интерфейсе после обновления страницы. Я подозреваю, что это связано с тем, что я кэшировал пользовательский интерфейс(index.html) в сервисном работнике и когда я вношу изменения в index.html и обновите его в браузере, браузер получит старый контент из кэша вместо последних изменений, которые я делаю.
Ниже приведен мой сценарий service worker:
var cacheName = 'samplePWA-step-6-2'; var dataCacheName = 'samplePWA-v2'; var filesToCache = [ './', './index.html' ]; // The install handler takes care of precaching the resources we always need. self.addEventListener('install', event => { event.waitUntil( caches.open(cacheName) .then(cache => cache.addAll(filesToCache)) .then(self.skipWaiting()) ); }); // The activate handler takes care of cleaning up old caches. self.addEventListener('activate', event => { const currentCaches = [cacheName, dataCacheName]; event.waitUntil( caches.keys().then(cacheNames => { return cacheNames.filter(cacheName => !currentCaches.includes(cacheName)); }).then(cachesToDelete => { return Promise.all(cachesToDelete.map(cacheToDelete => { return caches.delete(cacheToDelete); })); }).then(() => self.clients.claim()) ); }); // The fetch handler serves responses for same-origin resources from a cache. // If no response is found, it populates the runtime cache with the response // from the network before returning it to the page. self.addEventListener('fetch', event => { // Skip cross-origin requests, like those for Google Analytics. if (event.request.url.startsWith(self.location.origin)) { event.respondWith( caches.match(event.request).then(cachedResponse => { if (cachedResponse) { return cachedResponse; } return caches.open(dataCacheName).then(cache => { return fetch(event.request).then(response => { // Put a copy of the response in the runtime cache. return cache.put(event.request, response.clone()).then(() => { return response; }); }); }); }) ); } });
Что я уже пробовал:
1. Проверьте в инструментах разработчиков и service worker работает нормально без ошибок.
2. изменения применяются только после очистки кэша в браузере и хранилище.
3. Удалить "./index.html" в "filesToCache", внести некоторые изменения, обновите страницу в браузере. Последние изменения применяются без необходимости очистки кэша перед обновлением браузера.