设置requireInteraction的Notification如何判断是否仍在展示?
你可以通过监听Notification实例的close事件,配合全局变量存储当前活跃的通知实例来实现状态判断,修改后的代码如下:
// 全局存储当前活跃的通知实例 let activeNotification = null; function show(text) { // 已有活跃通知时直接返回 if (activeNotification) return; const notification = new Notification(text, { requireInteraction: true }); // 缓存当前通知实例 activeNotification = notification; // 监听通知关闭事件,重置状态 notification.addEventListener('close', () => { activeNotification = null; }); // 可选:监听点击事件,点击通知后关闭并重置状态 notification.addEventListener('click', () => { notification.close(); activeNotification = null; }); } // 权限申请成功后再调用通知展示逻辑 Notification.requestPermission().then(permission => { if (permission === 'granted') { show("first"); setTimeout(() => show("second"), 1000); } });
说明
- 原生
Notification实例创建后会暴露close事件,用户手动关闭通知、或者代码主动调用close方法时都会触发该事件,在事件回调中清空缓存的实例即可准确判断当前是否有活跃通知。 - 你还可以根据业务需求监听
error等其他事件,覆盖异常场景下的状态重置逻辑。 - 如果需要跨标签页判断通知活跃状态,可以配合
localStorage存储状态标识,在close事件触发时同步更新存储的状态即可。
内容的提问来源于stack exchange,提问作者kofifus
相关产品推荐
相关产品推荐

