Notification.requestPermission()具有3种可能的结果:granteddenieddefault

在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
});

09-19 00:19