2016-02-11 2 views
1

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

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

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

Вот мой обработчик события толчок, '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 Screenshot

+0

Работает ли это в Chrome? – Salva

+1

Кстати, вы можете преобразовать все эти '} else {return; } 'в ранние возвращения:' if (! condition) {return; } 'для уменьшения уровня отступов и повышения удобочитаемости кода. – Salva

+0

@ Salva. Да, его рабочий хром. n спасибо :) – Dino

ответ