1

Ben API çağrısına parametre olarak göndermek için krom kayıt id gerek, bu yüzden kayıt id karşılık gelen mesajı getirebilir. şöyle Benim kodudur:üzerinde 'waituntil' yürütülemedi 'ExtendableEvent'

self.addEventListener('push', function(event) { 

var apiPath = 'http://localhost/api/v1/notification/getNotification?regId='; 
event.waitUntil(registration.pushManager.getSubscription().then(function (subscription){ 
    apiPath = apiPath + subscription.endpoint.split("/").slice(-1); 
    event.waitUntil(fetch(apiPath).then(function(response){ 
     if(response.status !== 200){ 
      console.log("Problem Occurred:"+response.status); 
      throw new Error(); 
     } 
     return response.json().then(function(data){ 
      var title = data.title; 
      var message = data.body; 
      var icon = data.icon; 
      var tag = data.tag; 
      var url = data.url; 
      return self.registration.showNotification(title,{ 
       body: message, 
       icon: icon, 
       tag: tag, 
       data: url 
      }); 
     }) 
    }).catch(function(err){ 
     var title = 'Notification'; 
     var message = 'You have new notifications'; 
     return self.registration.showNotification(title,{ 
       body: message, 
       icon: '/images/Logo.png', 
       tag: 'Demo', 
       data: 'http://www.google.com/' 
      }); 
    }) 
    ) 
})); 
return; 
}); 

Yukarıdaki kod ile alıyorum hatadır: (sözden)

Yakalanmayan DOMException:

üzerine 'waituntil' yürütülemedi 'ExtendableEvent': olay işleyicisi zaten bitti (...) 'site arka planda güncellendi' ekstra bildirim ile birlikte.. Şimdi fetch(apiPath) bölümünden önce event.waitUntil kaldırmak bile, hala fazladan bildirim olduğunu alıyorum.

beni bu bir çözüm bulmak yardımcı olun.

P.S.: does'nt Chrome Push Notification: This site has been updated in the background de soru benim durumumda herhangi bir kullanım olduğu görülüyor.

cevap

3

Sen event.waitUntil birden çok kez aramaya gerek yoktur. Sadece bir kez aramanız ve bir söz vermeniz gerekiyorsa, söz verilinceye kadar olayın ömrü uzatılacaktır.

self.addEventListener('push', function(event) { 
    var apiPath = 'http://localhost/api/v1/notification/getNotification?regId='; 

    event.waitUntil(
    registration.pushManager.getSubscription() 
    .then(function(subscription) { 
     apiPath = apiPath + subscription.endpoint.split("/").slice(-1); 

     return fetch(apiPath) 
     .then(function(response) { 
     if (response.status !== 200){ 
      console.log("Problem Occurred:"+response.status); 
      throw new Error(); 
     } 

     return response.json(); 
     }) 
     .then(function(data) { 
     return self.registration.showNotification(data.title, { 
      body: data.body, 
      icon: data.icon, 
      tag: data.tag, 
      data: data.url, 
     }); 
     }) 
     .catch(function(err) { 
     return self.registration.showNotification('Notification', { 
      body: 'You have new notifications', 
      icon: '/images/Logo.png', 
      tag: 'Demo', 
      data: 'http://www.google.com/' 
     }); 
     }); 
    }) 
); 
}); 
+0

Ben sadece söz nesnesi döndü ve onunla event.waitUntil' 'değiştirilir iş yani yaptığımız' – doubt

+0

return' Evet, gerçekten. Sadece benim için okumayı kolaylaştırmak için girintiyi biraz değiştirdim, ama bu da bu. – Marco