HTML5 Notification API 无法主动关闭已显示的通知,因通知由系统管理且 JS 无控制权;仅对仍存在 JS 引用的未消失通知可用 notification.close() 关闭。
HTML5 的 Notification 对象本身**没有提供“关闭已显示通知”的主动接口**。浏览器一旦调用 show()(或自动触发),该通知由系统级通知服务管理,网页 JS 无法强制销毁它——这是设计使然,防止恶意页面频繁干扰用户。
但你可以通过以下方式间接控制:
notification.close() 仅对仍处于 JS 引用生命周期内的通知有效(即未被用户点击、未超时自动消失、且变量未被 GC 回收);一旦通知进入系统托盘或已消失,调用会静默失败let notif = new Notification('标题', { body: '内容' });,然后在合适时机(如 2 秒后)notif.close();
new Notification() 会直接抛出 DOMException: The user has blocked notifications,需先检查 Notification.permission === 'granted'
关闭“功能”不等于删除已弹出的通知,而是让后续调用失效。最可靠的做法是不再调用 new Notification(),并清理触发逻辑。
let notificationsEnabled = false;,所有通知触发前加 if (!notificationsEnabled) return;
fetch 响应、WebSocket 消息等触发,记得调用 removeEventListener 或关闭连接Notification.permission = 'denied' —— 这个属性是只读的,只能通过浏览器设置或 Notification.requestPermission() 返回值判断网

chrome://settings/content/notifications → 找到你的网站域名 → 设为「阻止」Notification.requestPermission() 后用户点「禁止」,下次访问仍会返回 'denied',但不会再次弹出授权请求(除非用户手动重置)Notification.close() 经常不起作用这不是 Bug,而是规范限制和生命周期管理导致的常见误解。
notif 变量可能已不可达Notification API,调用直接报错,close() 更无从谈起div + setTimeout + remove()),而非系统通知Notification 当作可控 UI 组件用;它本质是单向广播通道,能发不能收。真正需要精细控制的场景,优先考虑自建轻量 toast 组件。