web-dev-qa-db-fra.com

Google Chrome: DOMException: échec de l'enregistrement - manifeste vide ou manquant

J'essaie d'implémenter les notifications push sur mon site Web (à l'aide de Pushpad). J'ai donc créé un "manifest.json" avec le contenu suivant:

{
    "gcm_sender_id": "my_gcm_sender_id",
    "gcm_user_visible_only": true
}

bien sûr, j'ai créé un compte GCM valide et j'ai un identifiant d'expéditeur

J'ai mis le fichier manifest.json dans mon répertoire racine et j'ai également ajouté cette ligne à mon index.php :

<link rel="manifest" href="/manifest.json">

En utilisant Firefox tout fonctionne bien et je peux envoyer et recevoir des notifications Push (donc je pense que le manifeste-include fonctionne bien), mais Chrome ne fonctionnera pas ...

La console affiche l'erreur suivante:

Uncaught (in promise) DOMException: Registration failed - manifest empty or missing

J'ai longtemps cherché sur Google et essayé tout ce que j'ai trouvé, mais rien ne fonctionne.

Ce que j'ai essayé:

  1. créé le manifest.json avec "Editor" et l’a enregistré sous le type All Types (donc pas caché .txt - fichier) et avec UTF -8 - Encodage.
  2. chrome redémarré
  3. effacé le cache, l'historique, etc. de Chrome.

J'espère vraiment que quelqu'un pourra m'aider.

9
Fabian H.

Parce que je n'ai trouvé de réponse nulle part sur le Web, mais que j'ai réussi à la faire fonctionner après un certain temps, je souhaite fournir ma solution/réponse à d'autres utilisateurs, qui ont probablement le même problème:

Dans le fichier où j'ai inclus les fichiers Pushpad, j'ai écrit du code PHP avant la balise <head>-pour inclure certains fichiers, par exemple. pour la connexion à la base de données. Après avoir déplacé le code PHP sous le <head>- Tag, tout a bien fonctionné.

0
Fabian H.

Pour moi, c'était une redirection. Le manifest.json doit renvoyer un code d'état 200 (doit être directement disponible sur le serveur), sans aucune redirection. Vous pouvez vérifier la réponse via

wget --max-redirect=0 https://example.com/manifest.json

ou

curl https://example.com/manifest.json

3
Sudhanshu

J'ai rencontré le même problème, ajouté le fichier manifeste juste après la balise head. qui a fonctionné pour moi.Cheers!

3
Shreekanta

Cela peut être un problème avec votre étendue Service Worker. J'ai rencontré un problème similaire lorsque j'ai réarrangé mes fichiers/répertoires. Assurez-vous que votre sw.js est au même niveau que votre manifeste.json, sinon le technicien de service ne pourra pas trouver votre manifeste. Essayez de les mettre tous les deux à la racine de votre répertoire. Si vous le souhaitez, vous pouvez spécifier la scope de votre prestataire de services en l'ajoutant à serviceWorker.register():

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw-test/sw.js', {scope: '/sw-test/'})
  .then(function(reg) {
    // registration worked
    console.log('Registration succeeded. Scope is ' + reg.scope);
  }).catch(function(error) {
    // registration failed
    console.log('Registration failed with ' + error);
  });
}

Lisez plus ici: https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers

1
Trob Frank

Vous vous demandiez si votre "manifest.json" est accessible au public?

Sinon, vous pouvez peut-être essayer de le rendre public pour voir si cela aide ou non.

Et il semble que le chrome actuel, lors de l'obtention du "manifest.json" ne fournira pas les cookies.

0
Tom Tang

Il semble y avoir trois façons de résoudre ce bogue: a) Pas de redirections pour le fichier "manifest.json". b) Placez un lien vers ce fichier en haut de la balise. c) Assurez-vous qu'il n'y a pas d'autre fichier manifeste avant celui-ci, car il semble que le script Web Push tente d'importer le premier et renvoie une erreur en raison de données erronées. J'ai essayé les trois et j'ai finalement forcé Chrome à se comporter.

0
Łukasz P