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函数的两种变体。
答
承诺和回调是异步执行的。如果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);
格式已被弃用,不应使用。
您可以参考此[线索](https://bugs.chromium.org/p/chromium/issues/detail?id=704771)。清除浏览数据将清除该块。这里有一个额外的[论坛](https://github.com/firebase/quickstart-js/issues/115),这可能也有帮助。 – abielita
我想知道为什么firefox不会在Chrome浏览器中弹出通知弹出窗口。 –