J'essaie les notifications push en utilisant des travailleurs de service. utiliser mon propre serveur pour envoyer des notifications et eventSource est utilisé pour établir la connexion. après avoir ouvert, le service webpage fonctionne parfaitement. mais il s'arrête après quelques secondes. ce que je veux, c'est d'exécuter le service worker sans être arrêté. je veux qu'il fonctionne jusqu'à ce que le navigateur soit ouvert. quelqu'un peut-il recommander un moyen de le faire. ?

C'est mon ServiceWorker JS

/**
 * 
 */
'use strict';
var eventSource2 = new EventSource("Servlet");
console.log('Started', eventSource2);
eventSource2.addEventListener('install', function(event) {
    eventSource2.skipWaiting();
    console.log('Installed', event);

});

eventSource2.addEventListener('push',function(event) {
                    console.log(event.data);
                    var title = event.data;
                    self.registration.showNotification(title,{
                                        'body' : event.data,
                                        'icon' : 'http://icons.iconarchive.com/icons/designbolts/free-multimedia/1024/iMac-icon.png',
                                        'tag' : 'click',
                                    });
                    console.log("data from down", event.data);
                });

eventSource2.addEventListener('activate', function(event){
    console.log('Activated', event);
});

eventSource2.addEventListener('fetch', function(event) {
    console.log('Push message', event);
});
3
YM-91 7 mars 2016 à 10:04

3 réponses

Meilleure réponse

Les employés de service sont censés avoir une courte durée de vie, vous ne pouvez pas les faire fonctionner indéfiniment.

Vous pouvez utiliser un travailleur partagé pour le faire, mais ils ne s'exécutent que si votre site Web est ouvert.

Vous essayez de mélanger l'API push et EventSource. Si vous utilisez l'API Push, vous n'avez pas besoin de maintenir le travailleur du service en vie tout le temps, vous pouvez simplement le faire exécuter lorsqu'une notification push arrive.

Voir l'exemple dans le livre de recettes ServiceWorker.

6
Marco 7 mars 2016 à 10:32

Ce n'est pas possible et ce n'est pas le but d'un travailleur de service. Pourquoi voulez-vous exactement le garder en vie?

0
Mathieu Le Bihan 7 mars 2016 à 10:04

Lorsque vous attrapez une poussée comme ici:

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

La première chose à faire est d'utiliser event.waitUntil() qui prend une promesse et prolonge la durée de vie de l'événement et du serviceworker

self.addEventListener('push',function(event) {
  event.waitUntil(<YOUR PROMISE>)
}
0
lellefood 26 févr. 2018 à 15:57