为什么 Notification.requestPermission() 在某些浏览器里不弹窗?

司徒俊荣 阅读 537

我最近在做一个消息提醒功能,调用 Notification 权限请求时,发现有时候根本不会弹出授权提示框,特别是在 Chrome 里。本地开发环境(localhost)可以正常弹窗,但部署到 HTTPS 测试环境后就不行了,控制台也没报错。

我试过检查是否已经授过权,也确认页面是通过 HTTPS 访问的,但还是没效果。这是我的调用代码:

Notification.requestPermission().then(permission => {
  if (permission === 'granted') {
    console.log('通知权限已允许');
  } else {
    console.log('用户拒绝了通知权限');
  }
});
我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
极客钧溢
大概率是用户之前已经拒绝过权限了,浏览器会记住这个拒绝,之后调用 requestPermission() 不会再弹窗。

在请求前先检查状态:

if (Notification.permission === 'default') {
Notification.requestPermission().then(...)
} else {
console.log('当前权限状态:', Notification.permission)
}


如果是 'denied',用户必须手动去浏览器设置里改回来,代码层面没法再弹窗了。去浏览器设置里清除该站点的通知权限,或者换个浏览器试试。
点赞
2026-03-12 09:07