Notification.requestPermission()
具有3种可能的结果:granted
,denied
和default
。
在Chrome中,当用户使用X关闭权限对话框而不是明确说出default
时,您会得到block
。但是,如果在得到default
作为结果之后,调用Notification.permission
就会得到denied
,因此将来无法重试请求权限。
这是设计使然吗?有没有办法使 Chrome 对这两个结果的处理不同? Firefox以正确的方式处理此问题(您可以请求权限,直到用户明确拒绝它为止)
最佳答案
万一有人在寻找答案,我将保留此内容:
当用户第三次关闭权限对话框时,Chrome会自动将权限设置为denied
(它在导航栏上的权限弹出窗口下方显示automatically blocked
消息)。因此,前三次用户关闭对话框时,您会得到default
作为结果,但是第三次,将权限设置为denied
。
我使用这种逻辑的方式是:
window.Notification.requestPermission().then((result) => {
if (result === 'denied') {
// the user has denied permission
return;
}
if (result === 'default') {
// the user has closed the dialog
if (window.Notification.permission === 'denied') {
// the browser has decided to automatically denied permission
}
return;
}
// the user has granted permission
});