如何检测Firefox浏览器通知是否被临时禁用?
Firefox通知权限检测的那些坑
嘿,我之前也踩过Firefox这个通知权限的坑,来给你详细捋捋~
首先得明确Firefox对通知权限的特殊处理:它有个「临时禁用」的选项,和永久拒绝完全不同。当用户选择临时禁用后,当前标签/窗口的通知其实是被阻止的,但Notification.permission却会返回default——这是因为Firefox希望用户下次打开新标签时,还能重新触发权限请求,所以没有把状态直接设为denied。
这就是你脚本输出错误结果的原因!我猜你的脚本大概是这么写的:
if (Notification.permission !== 'denied') { console.log("browser notifications were allowed"); }
因为临时拒绝返回default,不等于denied,所以脚本误判成了允许状态。
正确的检测方式
要准确判断当前会话的实际权限状态,得这么做:
- 优先判断
granted状态:只有当Notification.permission === 'granted'时,才确定通知是真正被允许的。 - 处理Firefox的临时拒绝:如果状态是
default,可以主动发起一次权限请求——Firefox在临时拒绝的会话里,调用Notification.requestPermission()不会弹出请求框,而是直接返回denied,这样就能拿到真实的权限状态了。
给你个可用的示例代码:
async function checkActualNotificationPermission() { let currentPermission = Notification.permission; // 若状态为default,尝试请求一次以获取真实状态 if (currentPermission === 'default') { currentPermission = await Notification.requestPermission(); } if (currentPermission === 'granted') { console.log("浏览器通知已允许"); } else { console.log("浏览器通知已被拒绝(包括临时拒绝)"); } } // 调用检测函数 checkActualNotificationPermission();
这样不管是永久拒绝、临时拒绝还是未授权状态,都能准确判断啦~
内容的提问来源于stack exchange,提问作者NtFreX
相关产品推荐
相关产品推荐

