Проблема клиентов окна Service Worker в Firefox - push-уведомление через Интернет

Я пытаюсь реализовать push-уведомление для Интернета. При попытке проверить, открыто ли веб-приложение погоды, firefox выдает странную ошибку сервисному работнику. И на хроме работает нормально.

«Событию сервисного работника waitUntil () было передано обещание, которое было отклонено с ошибкой NotSupportedError: операция не поддерживается».

если я установил для 'includeUncontrolled' значение false, и firefox, и chrome вернут 'windowClients' пустой массив. Не обнаруживает страницу.

Вот мой обработчик событий push, «clients.matchAll» - это строка 50.

// Push Notification Event Handler
self.addEventListener('push', function(event) {

  // Push Received
  event.waitUntil(

      // Check app page open
      self.clients.matchAll({ // Line 50
        includeUncontrolled: true, // Error occuring when enabling this
        type: 'window'
      })
      .then(function(windowClients) {

        // If no page instances show notification
        if (!windowClients.length) {

          // Get subscription key to call api
          return self.registration
              .pushManager
              .getSubscription()
              .then(function(subscription) {
                if (subscription) {

                  // Get push message data
                  var token = encodeURIComponent(String(subscription.endpoint).split('/').pop());
                  var url = 'api/push/data?token=' + token + '&type=' + getPushDeviceType();
                  return self.fetch(url, {credentials: 'include'})
                      .then(function(response) {

                        if (response.status === 200) {
                          return response.json()
                              .then(function(data) {
                                if (data) {

                                  // Display notification
                                  return self.registration
                                      .showNotification('App Notifications', {
                                        'body': data.msg,
                                        'icon': data.img,
                                        'tag': 'app'
                                      });
                                } else {
                                  return;
                                }
                              });
                        } else {
                          return;
                        }
                      });
                } else {
                  return;
                }
              });
        } else {
          return;
        }
      })
      );
});

Скриншот Firebug

Снимок экрана Firebug


person Dino Babu    schedule 11.02.2016    source источник
comment
Это работает в Chrome?   -  person Salva    schedule 11.02.2016
comment
Кстати, вы можете преобразовать все эти } else { return; } в ранние возвраты: if (!condition) { return; }, чтобы уменьшить уровень отступов и повысить читаемость кода.   -  person Salva    schedule 11.02.2016
comment
@ Сальва. Да, это работает в хроме. n спасибо :)   -  person Dino Babu    schedule 11.02.2016


Ответы (1)


Параметр includeUncontrolled был представлен в Firefox 45: https://bugzilla.mozilla.org/show_bug.cgi?id=1229056.

Он не был перенесен в Firefox 44: https://hg.mozilla.org/releases/mozilla-release/file/f315bde4ae0f/dom/workers/ServiceWorkerClients.cpp#l583.

person Marco Castelluccio    schedule 11.02.2016