2016-12-02 6 views
0

Von hier https://developers.google.com/web/fundamentals/getting-started/primers/service-workersWeb Push - Platzierung Servicemitarbeiter

  1. Wenn der Dienst Arbeiter ist am Wurzel der Domäne bedeutet dies , dass der Umfang des Servicemitarbeiters wird der gesamte Ursprung sein.
  2. Aber wenn wir die Servicemitarbeiter Datei auf /example/sw.js registrieren, dann die Servicemitarbeiter nur für Seiten, deren URL beginnt mit/example/(dh/example/Seite1 /,/holen Ereignisse sehen würde, Beispiel/Seite2 /).

Zweiter Punkt erwähnt nur holen wird an/nicht funktionieren (root oder andere als Beispiel), wenn ich die Servicemitarbeiter bei/example Ort /.

Aber Abonnement (Erzeugung von Sub-Objekt) selbst nicht erzeugt zu werden, wenn der Servicemitarbeiter bei/Beispiel ist/und wenn die Web-Seite ist im/(root oder andere als Beispiel), die der Doc nicht eindeutig erklären.

Bitte lassen Sie mich wissen, wenn sogar die Generierung von Abonnement (pushManager.getSubscription) im Service-Mitarbeiter selbst nicht passieren wird.

PS: Ich habe es versucht, auf Chrome 54.0.2840.100 Ubuntu 16.04 LTS

+1

Im Allgemeinen haben sollte, da es Web-Push ist, würde ich die Servicemitarbeiter in der Wurzel setzen, nach dem Stil der Benachrichtigungs-API mit Berechtigungen, die sich auf die Domäne und nicht auf den Pfad beziehen. – collimarco

Antwort

0

Erzeugung von Abonnement Objekt hängt nicht von Servicemitarbeiter Umfang. Sie können es tun, wo

Eg. permission.js

export function allowNotifications(scope){ 
    if (navigator.serviceWorker && Notification){ 
    if(Notification.permission !== "granted") { 
     navigator.serviceWorker.ready.then(function(reg) { 
     subscribe(reg); 
     }); 
    } 
    } 
} 

function subscribe(reg) { 
    reg.pushManager.subscribe({userVisibleOnly: true}).then(function(pushSubscription) { 
      bindUserToDevice(JSON.stringify(pushSubscription)); 
    }, function (err) { 
     console.log('error'); 
     }); 
} 

export function bindUserToDevice(subscriptionObj) { 

    // received subsciption object should be send to backend to bind the device for pushes 
    var data = { 
    type: 'POST', 
    url : '/bind', 
    body: subscriptionObj, 
    }; 
    fetch('/bind', data); 

} 

allowNotifications Funktion kann von überall aufgerufen werden. Es sollte nur die Servicemitarbeiter Datei auf root vorhanden sein, die Push Ereignis

global.addEventListener('push', function(event) { 
    var pushObj = event.data.json(); 
    var pushData = pushObj.data; 

    var title = pushData && pushData.title; 
    var body = pushData && pushData.body; 
    var icon = '/img/logo.png'; 

    event.waitUntil(global.registration.showNotification(title, { 
     body: body, 
     icon: icon, 
     data:pushData 
    })); 
}); 
Verwandte Themen