Возможно ли, чтобы работник службы дважды подряд уведомлял в среде разработки (localhost)? - PullRequest
0 голосов
/ 16 января 2020

Спасибо, я внедрил webpu sh в Ruby в Rails, но я не могу получать уведомления во второй раз в среде разработки, и я каждый раз отменяю регистрацию. Это правильное поведение?

service_worker. js .erb

var CACHE_VERSION = 'v1';
var CACHE_NAME = CACHE_VERSION + ':sw-cache-';

function onInstall(event) {
  console.log('[Serviceworker]', "Installing!", event);
  event.waitUntil(
    caches.open(CACHE_NAME).then(function prefill(cache) {
      return cache.addAll([
        '<%#= asset_path "hoge.js" %>',
        '<%= asset_path "hoge.css" %>',
        '/offline.html',

      ]);
    })
  );
}

function onActivate(event) {
  console.log('[Serviceworker]', "Activating!", event);
  event.waitUntil(
    caches.keys().then(function (cacheNames) {
      return Promise.all(
        cacheNames.filter(function (cacheName) {
          return cacheName.indexOf(CACHE_VERSION) !== 0;
        }).map(function (cacheName) {
          return caches.delete(cacheName);
        })
      );
    })
  );
}

function onFetch(event) {
  event.respondWith(
    fetch(event.request).catch(function () {
      return caches.match(event.request).then(function (response) {
        if (response) {
          return response;
        }
        if (event.request.mode === 'navigate' ||
          (event.request.method === 'GET' && event.request.headers.get('accept').includes('text/html'))) {
          console.log('[Serviceworker]', "Fetching offline content", event);
          return caches.match('/offline.html');
        }
      })
    })
  );
}

self.addEventListener('install', onInstall);
self.addEventListener('activate', onActivate);
self.addEventListener('fetch', onFetch);


self.addEventListener('push', function (event) {
  var title = (event.data && event.data.text()) || 'test push';
  var data = {
    body: "",
    tag: "push-simple-demo-notification-tag",
    icon: '/icon.png',
    vibrate: [400, 100, 400],
    data: {
      link_to: '/'
    }
  };

  event.waitUntil(self.registration.showNotification(title, data)
    .then(
      function (showEvent) { },
      function (error) {
        console.log(error);
      }))
});

self.addEventListener("notificationclick", function (event) {
  event.notification.close();
  var link_to = event.notification.data.link_to;

  event.waitUntil(clients.matchAll({
    type: "window"
  }).then(function (clientList) {
    for (var i = 0; i < clientList.length; i++) {
      var client = clientList[i];
      var regexp = new RegExp(link_to + '$');
      var match = client.url.match(regexp);

      if (match != null && 'focus' in client)
        return client.focus();
    }
    if (clients.openWindow) {
      return clients.openWindow(link_to);
    }
  }));
});

Первое уведомление после отмены регистрации работает нормально. Второе уведомление никогда не может быть отправлено. Проверка обновления при перезагрузке в настройках chrome также не работала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...