Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

131
Views
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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!