Mi serviceworker es generado parcialmente por gulp, por lo que existe la posibilidad de que termine con un SyntaxError o TypeError si he cometido un error, y me gustaría estar a punto de detectar en mi código navigator.serviceWorker.register que esto ha ocurrido y enviar un informe de error.
No he descubierto cómo hacer esto. Supuse que habría algún tipo de evento "en caso de error", pero no he encontrado ninguno. Parece que tal vez estoy buscando un SW con un estado redundant ...
Lo intenté
const newWorker = reg.installing newWorker.addEventListener('statechange', () => { if (newWorker.state == 'redundant') { // log error } })pero la condición no parece dispararse. Esta condición tampoco se dispara:
reg.addEventListener('updatefound', () => { if (reg.redundant) { // log error } })No veo ningún ejemplo de esto en los tutoriales de SW, lo cual es sorprendente, ya que parece algo básico para notar y detectar.
Si hay un error de sintaxis, o si su trabajador de servicio contiene algo que no es JavaScript válido, su llamada a navigator.serviceWorker.register() será rechazada. (También podría rechazar si hay un error de red que impide que se descargue el script).
Si su trabajador de servicio contiene JavaScript válido pero genera una excepción de tiempo de ejecución antes de finalizar el paso de install , entonces el trabajador de servicio pasará del estado de installing a redundant . Tenga en cuenta que en este escenario, navigator.serviceWorker.register() no se rechazará, ya que la transición de estado redundant ocurre después de que el registro se haya realizado correctamente.
navigator.serviceWorker.register('sw.js') .then((reg) => { // reg.installing may or may not be set, depending on whether // a new SW was registered. reg.installing?.addEventListener('statechange', (event) => {\ if (event.target.state === 'redundant') { // There was a runtime error. } }); }) .catch((err) => console.log('SW registration failed:', err));