web-dev-qa-db-fra.com

navigator.serviceWorker n'est jamais prêt

J'ai enregistré un employé de service avec succès, mais 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?

38
Larry K

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

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

Voir article HTML5Rocks -

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

Ajouté

Un nouveau problème est que le technicien de service n'est jamais prêt si la page est rechargée en dur. Les rechargements ultérieurs des pages souples fonctionnent correctement. Le propre exemple de code de Google échoue. Voir le Chrome.

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

72
Larry K

Dans mon cas, fermez simplement l'onglet et ouvrez-le à nouveau ...

1
Darkowic