diff --git a/apps/frontend/public/preloader.html b/apps/frontend/public/preloader.html
index fdb2d45..6acf526 100644
--- a/apps/frontend/public/preloader.html
+++ b/apps/frontend/public/preloader.html
@@ -60,13 +60,21 @@
}
if ('serviceWorker' in navigator) {
- navigator.serviceWorker.register('/service-worker.js')
+ const registrationPromise = navigator.serviceWorker.register('/service-worker.js')
+
+ registrationPromise.then(() => {
+ navigator.serviceWorker.controller.postMessage({ type: 'CHECK_MAIN_PAGE_READY' })
+ })
navigator.serviceWorker.onmessage = (event) => {
console.log('onmessage', event.data && event.data.type);
if (event.data && event.data.type === 'MAIN_PAGE_READY') {
+ console.log('RELOAD!!!')
location.reload();
}
+ if (event.data && event.data.type === 'MAIN_PAGE_IS_NOT_READY') {
+ console.log('MAIN_PAGE_IS_NOT_READY');
+ }
if (event.data && event.data.type === 'NETWORK_ERROR') {
showOfflineMessage();
@@ -85,6 +93,7 @@
// Обрабатываем ответ от сервис-воркера
messageChannel.port1.onmessage = (event) => {
resolve(event.data.online);
+ console.log('resolve event.data.online', event.data.online);
};
// Посылаем сообщение в сервис-воркер
diff --git a/apps/frontend/public/service-worker.js b/apps/frontend/public/service-worker.js
index e1bd72c..bd24b7c 100644
--- a/apps/frontend/public/service-worker.js
+++ b/apps/frontend/public/service-worker.js
@@ -43,6 +43,15 @@ const TEMP_CACHE = new Map() // Используем карту для врем
async function handleNavigationRequest(request) {
if (TEMP_CACHE.has(request.url) && navigator.onLine) {
+ console.log('notifying clients about MAIN_PAGE_READY in cache')
+ clients.matchAll({ type: 'window' }).then((allClients) => {
+ allClients.forEach((client) =>
+ client.postMessage({
+ type: 'MAIN_PAGE_READY',
+ }),
+ )
+ })
+
return TEMP_CACHE.get(request.url).clone()
}
@@ -59,6 +68,7 @@ async function handleNavigationRequest(request) {
TEMP_CACHE.set(request.url, networkResponse)
// Сообщаем клиенту, что основная страница готова
+ console.log('notifying clients about MAIN_PAGE_READY after fetch')
const allClients = await clients.matchAll({ type: 'window' })
allClients.forEach((client) =>
client.postMessage({
@@ -114,6 +124,13 @@ async function updateStaticAssetsCache() {
self.addEventListener('message', async (event) => {
if (event.data && event.data.type === 'SKIP_WAITING') {
self.skipWaiting()
+ } else if (event.data && event.data.type === 'CHECK_MAIN_PAGE_READY') {
+ console.log('CHECK_MAIN_PAGE_READY:', TEMP_CACHE.size ? 'ready' : 'not ready')
+ if (TEMP_CACHE.size === 0) {
+ event.source.postMessage({ type: 'MAIN_PAGE_IS_NOT_READY' })
+ } else {
+ event.source.postMessage({ type: 'MAIN_PAGE_READY' })
+ }
} else if (event.data && event.data.type === 'CHECK_ONLINE_STATUS') {
const isOnline = navigator.onLine // Проверяем состояние сети
event.ports[0].postMessage({ online: isOnline }) // Отправляем результат обратно