This commit is contained in:
@@ -60,13 +60,21 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ('serviceWorker' in navigator) {
|
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) => {
|
navigator.serviceWorker.onmessage = (event) => {
|
||||||
console.log('onmessage', event.data && event.data.type);
|
console.log('onmessage', event.data && event.data.type);
|
||||||
if (event.data && event.data.type === 'MAIN_PAGE_READY') {
|
if (event.data && event.data.type === 'MAIN_PAGE_READY') {
|
||||||
|
console.log('RELOAD!!!')
|
||||||
location.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') {
|
if (event.data && event.data.type === 'NETWORK_ERROR') {
|
||||||
showOfflineMessage();
|
showOfflineMessage();
|
||||||
@@ -85,6 +93,7 @@
|
|||||||
// Обрабатываем ответ от сервис-воркера
|
// Обрабатываем ответ от сервис-воркера
|
||||||
messageChannel.port1.onmessage = (event) => {
|
messageChannel.port1.onmessage = (event) => {
|
||||||
resolve(event.data.online);
|
resolve(event.data.online);
|
||||||
|
console.log('resolve event.data.online', event.data.online);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Посылаем сообщение в сервис-воркер
|
// Посылаем сообщение в сервис-воркер
|
||||||
|
|||||||
@@ -43,6 +43,15 @@ const TEMP_CACHE = new Map() // Используем карту для врем
|
|||||||
|
|
||||||
async function handleNavigationRequest(request) {
|
async function handleNavigationRequest(request) {
|
||||||
if (TEMP_CACHE.has(request.url) && navigator.onLine) {
|
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()
|
return TEMP_CACHE.get(request.url).clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,6 +68,7 @@ async function handleNavigationRequest(request) {
|
|||||||
TEMP_CACHE.set(request.url, networkResponse)
|
TEMP_CACHE.set(request.url, networkResponse)
|
||||||
|
|
||||||
// Сообщаем клиенту, что основная страница готова
|
// Сообщаем клиенту, что основная страница готова
|
||||||
|
console.log('notifying clients about MAIN_PAGE_READY after fetch')
|
||||||
const allClients = await clients.matchAll({ type: 'window' })
|
const allClients = await clients.matchAll({ type: 'window' })
|
||||||
allClients.forEach((client) =>
|
allClients.forEach((client) =>
|
||||||
client.postMessage({
|
client.postMessage({
|
||||||
@@ -114,6 +124,13 @@ async function updateStaticAssetsCache() {
|
|||||||
self.addEventListener('message', async (event) => {
|
self.addEventListener('message', async (event) => {
|
||||||
if (event.data && event.data.type === 'SKIP_WAITING') {
|
if (event.data && event.data.type === 'SKIP_WAITING') {
|
||||||
self.skipWaiting()
|
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') {
|
} else if (event.data && event.data.type === 'CHECK_ONLINE_STATUS') {
|
||||||
const isOnline = navigator.onLine // Проверяем состояние сети
|
const isOnline = navigator.onLine // Проверяем состояние сети
|
||||||
event.ports[0].postMessage({ online: isOnline }) // Отправляем результат обратно
|
event.ports[0].postMessage({ online: isOnline }) // Отправляем результат обратно
|
||||||
|
|||||||
Reference in New Issue
Block a user