2017-10-04 5 views
0

exécuté le code suivant dans la consoleNotification.requestPermission(). Puis() retourne toujours objet Promise au lieu de rejeter la valeur réglée dans la console

Notification.requestPermission(function(status) { 
    console.log('Notification permission status:', status); 
}); 

en chrome v 61

retour

Notification permission status: "granted"

si déjà donné sinon une fenêtre contextuelle apparaît près du côté gauche de la barre d'adresse avec l'option Autoriser et Bloquer.

Bien que, après plusieurs tentatives, le chrome cesse également d'afficher la fenêtre contextuelle et donne des informations à l'utilisateur dans la console.

et retour

Notification permission status: "denied" 

avec le message

Notifications autorisation a été bloqué en tant que l'utilisateur a rejeté l'autorisation invite à plusieurs reprises. Voir https://www.chromestatus.com/features/6443143280984064 pour plus d'informations .

MAIS

dans développeur Firefox Édition v 57

retour objet Promise comme ci-dessous

Promise { <state>: "pending" } 

pourquoi je ne reçois pas le message de la console et ne ne pop-up apparaît .

Donc, ma question est-ce que je dois configurer quelque chose dans firefox?

ou il me manque quelque chose.

Note: J'ai essayé les deux variantes de la fonction requestPermission suggérées sur MDN.

+0

Vous pouvez vous référer à ce [fil] (https://bugs.chromium.org/p/chromium/issues/detail?id=704771). Effacer les données de navigation effacera le bloc.Voici un [forum] supplémentaire (https://github.com/firebase/quickstart-js/issues/115) qui pourrait également vous aider. – abielita

+0

Je veux savoir pourquoi firefox n'appelle pas la fenêtre contextuelle de notification alors que chrome le fait. –

Répondre

1

Les promesses et les rappels sont exécutés de manière asynchrone. Ce que vous voyez quand vous exécutez ceci si Firefox est la valeur de retour temporaire de la promesse que le fichier console.log sera exécuté dans le futur. Le fichier console.log n'est cependant pas encore exécuté.

>> Notification.requestPermission().then(function(permission) { console.log(permission); }); 
← Promise { <state>: "pending" } 

Fondamentalement, ce que vous voyez fonctionne comme prévu. Il est semblable à faire quelque chose comme ceci:

>> let thing = Notification.requestPermission().then(function(permission) { console.log(permission); }); 
    console.log(thing); 
Promise { <state>: "pending" } 
← undefined 
granted 

Le console.log(thing) est l'exploitation forestière de la promesse que le travail va se passer dans l'avenir, mais l'octroi de l'autorisation et l'console.log(permission) n'a pas encore été exécuté.

Le format Notification.requestPermission(callback); est également obsolète et ne doit pas être utilisé.