Chrome会默认'默认' Notification.requestPermission()的结果为'拒绝'

时间:2017-11-13 12:04:25

标签: javascript google-chrome push-notification permissions

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

在Chrome中,当用户使用X关闭权限对话框而不是明确说出default时,您会获得block。但是,如果在获得default后,您拨打Notification.permission即可获得denied,从而无法再次尝试重新获得许可。

这是设计的吗?有没有办法让铬处理不同这两个结果? Firefox会以正确的方式处理此问题(您可以在用户明确拒绝权限之前询问权限)

1 个答案:

答案 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
});