Как заставить сервисного работника регистрироваться только при первом посещении? - PullRequest
0 голосов
/ 01 июня 2018

Привет У меня есть шаблон ejs на экспресс, который генерирует HTML.В этом шаблоне я записал свой регистрационный код работника службы, который является общим для всех страниц веб-сайта, и, таким образом, регистрационный код оказывается на каждой странице веб-сайта.Таким образом, при каждом посещении пользователя выполняется регистрационный код сервисного работника, что я считаю плохим.Как заставить этот код работать только при первом посещении пользователя?

Пожалуйста, найдите мой код ниже:

<script>
  if ('serviceWorker' in navigator) {
    window.addEventListener('load', function() {
      var hashes = {};
      ["appCss", "appJs"].map((val,idx) => {
        let prop;
        if(document.getElementById(val)) {
          prop = val.toLowerCase().indexOf("css") == -1 ? "src" : "href";
          hashes[val] = document.getElementById(val)[prop];
        }
      });
      hashes = JSON.stringify(hashes);
      navigator.serviceWorker.register(`/service-worker.js?hash=${encodeURIComponent(hashes)}`).then(function(registration) {
        console.log('ServiceWorker registration successful with scope: ', registration.scope);
      }, function(err) {
        console.log('ServiceWorker registration failed:', err);
      });
    });
  }
</script>

1 Ответ

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

Из документации MDN :

Метод register () интерфейса ServiceWorkerContainer создает или обновляет ServiceWorkerRegistration для данного scriptURL.

В случае успехарегистрация сервисного работника связывает предоставленный URL-адрес сценария с областью, которая впоследствии используется для сопоставления навигации. Вы можете вызвать этот метод безоговорочно с контролируемой страницы.То есть вам не нужно сначала проверять, есть ли активная регистрация.

Так что вы всегда должны звонить register на своей странице.API браузера будет обрабатывать это для вас.

...