Обновление Angular5 Service Worker (SWUpdate) не обнаруживается в Firefox. Работаю на хроме - PullRequest
0 голосов
/ 28 апреля 2018

Я использую Angular5 и angular service worker.

Я cached некоторые данные и некоторые активы, и все работает нормально, как ожидалось, и даже развернул код.

Теперь, если я обновлю некоторый код и снова разверну, service worker не будет обновлен.

Итак, я прошел по ссылке Angular Service Worker , и я реализовал SwUpdate service.

Вот мой код:

Я создал службу и назвал ее в компоненте приложения

import { Injectable, NgZone } from '@angular/core';
import { interval } from 'rxjs/observable/interval';
import { SwUpdate } from '@angular/service-worker';
import { Observable } from 'rxjs/Rx';


@Injectable()
export class ServiceWorkerService {

  constructor(updates: SwUpdate, ngZone: NgZone) {
    console.log('Servicee worker update called');
    updates.available.subscribe(event => {
      console.log('current version is', event.current);
      console.log('available version is', event.available);
      updates.activateUpdate().then(() => document.location.reload());
    });
    updates.activated.subscribe(event => {
      console.log('old version was', event.previous);
      console.log('new version is', event.current);
    });
    ngZone.runOutsideAngular(() => {
      interval(6000).subscribe(() => {
        console.log('Inside Interval')
        ngZone.run(() => updates.checkForUpdate());
      });
    });
  }
}

Что делает вышеуказанный код:

  • Каждый раз, когда развертывается новый код, старый сервисный работник обнаруживает его.
  • Тогда это subscribes до updates.available событие.
  • Мы слушаем это событие и перезагружаем страницу.

Проблема:

Теперь проблема в том, что он отлично работает на Chrome. но не в светлячок . В Firefox код не приходит внутрь updates.available.subscribe

1 Ответ

0 голосов
/ 27 июня 2018

У меня была такая же проблема, и я смог ее исправить, зарегистрировав работника службы в main.ts:

platformBrowserDynamic().bootstrapModule(AppModule).then(() => {
  if ('serviceWorker' in navigator && environment.production) {
    navigator.serviceWorker.register('/ngsw-worker.js');
  }
}).catch(err => console.log(err));

Я также создал рабочую службу Service, чтобы уведомлять пользователя о появлении нового обновления:

enter image description here

Если вас интересует, как выглядит моя служба работника сервиса, вы можете увидеть код здесь .

Вы также можете проверить, были ли зарегистрированы какие-либо ошибки, посетив yourdomain.com/ngsw/state

...