Notification.requestPermission()
有3种可能的结果:granted
,denied
和default
。
在Chrome中,当用户使用X关闭权限对话框而不是明确说出default
时,您会获得block
。但是,如果在获得default
后,您拨打Notification.permission
即可获得denied
,从而无法再次尝试重新获得许可。
这是设计的吗?有没有办法让铬处理不同这两个结果? Firefox会以正确的方式处理此问题(您可以在用户明确拒绝权限之前询问权限)
答案 0 :(得分:3)
我会留下这个以防万一有人在寻找答案:
当用户第三次关闭权限对话框时,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
});