Notification.requestPermission()。然后()总返回无极对象,而不是解决拒绝在控制台值

Notification.requestPermission()。然后()总返回无极对象,而不是解决拒绝在控制台值

问题描述:

执行以下在控制台代码Notification.requestPermission()。然后()总返回无极对象,而不是解决拒绝在控制台值

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

v 61

返回

Notification permission status: "granted"

如果已经给出,否则弹出窗口出现在左侧带有允许和阻止选项的地址栏。

尽管经过多次尝试,Chrome也停止显示弹出窗口,并在控制台中向用户提供信息。

并返回

Notification permission status: "denied" 

与消息

通知许可已被阻止的用户已驳回 提示几次的权限。有关更多 的信息,请参阅 https://www.chromestatus.com/features/6443143280984064

在Firefox开发版

v 57

回报承诺对象,如下

Promise { <state>: "pending" } 

为什么我没有得到控制台消息也不认为会出现弹出。

所以我的问题是我需要在Firefox配置的东西吗?

或者我缺乏一些东西。

注意:我已经尝试了MDN上建议的requestPermission函数的两种变体。

+0

您可以参考此[线索](https://bugs.chromium.org/p/chromium/issues/detail?id=704771)。清除浏览数据将清除该块。这里有一个额外的[论坛](https://github.com/firebase/quickstart-js/issues/115),这可能也有帮助。 – abielita

+0

我想知道为什么firefox不会在Chrome浏览器中弹出通知弹出窗口。 –

承诺和回调是异步执行的。如果Firefox是将来会执行console.log的承诺的临时返回值,那么在运行时会看到什么。但console.log尚未执行。

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

基本上你看到的是按预期工作。它类似于做这样的事情:

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

console.log(thing)正在记录工作,在未来,但权限授予会发生的承诺和console.log(permission)尚未执行。

此外Notification.requestPermission(callback);格式已被弃用,不应使用。