Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

128
Visualizações
Safari no actualiza el caché en las pestañas adyacentes cuando se lanza un nuevo trabajador de servicio

Estoy usando worbox y me encontré con un problema. Después de ensamblar los archivos, ejecuto injectManifest para generar los archivos almacenados previamente en caché. Además, tengo diferentes estrategias para diferentes tipos de archivos. Notifico a los usuarios que instalen una nueva versión a través de una ventana emergente con un botón de confirmación y esto funciona muy bien en Chrome. Confirmas la instalación, a través de postMessage envío un mensaje y se recargan todas las pestañas y se actualiza el caché. Pero en safari esto no funciona, de igual forma se recargan las pestañas, pero la caché se actualiza solo en 1 pestaña, en todas las demás se mantiene vieja y para que no haga lo único que ayuda es un navegador cerrado o reiniciando manualmente el caché, en todas las pestañas posteriores que abra el caché se actualiza.

Ejemplo de código con instalación de un trabajador y notificación posterior para la instalación

 import {Workbox} from 'https://storage.googleapis.com/workbox-cdn/releases/6.4.2/workbox-window.prod.mjs'; if ('serviceWorker' in navigator) { const wb = new Workbox('/pwabuilder-sw.js'); let refreshing; navigator.serviceWorker.addEventListener('controllerchange', (event) => { if (refreshing) return refreshing = true window.location.reload() }); const showSkipWaitingPrompt = (event) => { document.querySelector('.notification-install-sw').classList.add('show'); document.getElementById('reload').addEventListener('click', function(e){ wb.messageSkipWaiting(); document.querySelector('.offline-with-cache-notification').style.display = 'none'; }); }; wb.addEventListener('waiting', showSkipWaitingPrompt); wb.register(); } if (!navigator.onLine) { document.querySelector('.offline-with-cache-notification').classList.add('show'); }

Y código de ejemplo del propio archivo de trabajo

 importScripts('https://storage.googleapis.com/workbox-cdn/releases/6.4.2/workbox-sw.js'); workbox.googleAnalytics.initialize(); const STYLE_CACHE = "stylesheets"; self.addEventListener('message', (event) => { if (event.data && event.data.type === 'SKIP_WAITING') { self.skipWaiting(); } }); workbox.core.clientsClaim(); // Clean Up Old Precaches workbox.precaching.cleanupOutdatedCaches(); workbox.precaching.precacheAndRoute(self.__WB_MANIFEST); workbox.routing.registerRoute( ({request, url}) => request.destination === "style", new workbox.strategies.StaleWhileRevalidate({ cacheName: STYLE_CACHE, plugins: [ new workbox.cacheableResponse.CacheableResponsePlugin({ statuses: [200] }), new workbox.expiration.ExpirationPlugin({ maxEntries: 15, maxAgeSeconds: 30 * 24 * 60 * 60, // 30 Days purgeOnQuotaError: true, }), ], }) )
about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda