Navigator.serviceWorker n'est jamais prêt

J'ai enregistré un travailleur de service avec succès, mais ensuite le code

navigator.serviceWorker.ready.then(function(serviceWorkerRegistration) {
    // Do we already have a push message subscription?
    ....

Se Bloque -- la fonction n'est jamais appelée. Pourquoi?

31
demandé sur Larry K 2015-04-26 08:18:25

1 réponses

Le problème était que le service-worker.le fichier js a été stocké dans un sous-répertoire assets.

Ne faites pas cela: stockez le service-worker.js dans le root of your app (ou supérieur). De cette façon, votre application peut accéder au service de travail.

Voir L'article html5rocks --

Une subtilité avec la méthode register est l'emplacement du fichier de travail de service. Vous remarquerez dans ce cas que le fichier service worker est à la racine du domaine. Cela signifie que le service la portée du travailleur sera l'origine entière. En d'autres termes, ce service worker recevra des événements fetch pour tout ce qui se trouve sur ce domaine. Si nous enregistrons le travailleur fichier /exemple/sw.js, alors le travailleur de service ne verrait que les événements de récupération pour les pages dont L'URL commence par / example/ (c'est-à-dire /example/page1/, /example/page2/).

Ajouté

Un nouveau problème est que le serviceworker n'est jamais prêt si la page est rechargée en dur. Les rechargements de pages logicielles suivants fonctionnent fin. Le propre exemple de code de Google échoue. voir le rapport de bogue Chrome.

Le correctif de bug a été inclus avec Chrome 44.

63
répondu Larry K 2015-09-15 16:53:36