You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron JS 12.2.1如何批量关闭/清除所有已显示通知?

Electron 12.2.1 批量清除通知实现方案

针对你的需求,核心思路是跟踪所有已创建的Notification实例,通过调用实例的close()方法实现批量关闭,以下分主进程和渲染进程场景给出具体实现:

一、主进程中实现

  1. 维护数组存储通知实例
    在主进程代码里,先声明一个数组来保存每个创建的Notification对象:
    const { Notification } = require('electron');
    // 存储所有活跃的通知实例
    const activeNotifications = [];
    
  2. 创建通知时加入数组并监听清理事件
    每次创建通知后,将实例推入数组,同时监听closed事件,在通知被手动/自动关闭时从数组中移除,避免内存泄漏:
    function createNotification(title, body) {
      const notification = new Notification({ title, body });
      notification.show();
      activeNotifications.push(notification);
      // 通知关闭时从数组移除
      notification.on('closed', () => {
        const index = activeNotifications.indexOf(notification);
        if (index !== -1) {
          activeNotifications.splice(index, 1);
        }
      });
      return notification;
    }
    
  3. 实现批量关闭函数
    遍历数组调用每个实例的close()方法,之后清空数组(按需选择是否保留已关闭实例):
    function clearAllNotifications() {
      activeNotifications.forEach(notification => {
        try {
          notification.close();
        } catch (err) {
          // 忽略已自动关闭实例可能抛出的错误
          console.log('关闭通知出错:', err);
        }
      });
      activeNotifications.length = 0; // 清空数组
    }
    
    你可以通过IPC将这个方法暴露给渲染进程调用,或者绑定到主进程内部的触发事件(比如菜单按钮点击)。

二、渲染进程中实现

如果把通知逻辑移到渲染进程,思路和主进程一致:

  1. 维护通知实例数组
    const activeNotifications = [];
    
  2. 创建并跟踪通知
    function createNotification(title, body) {
      const notification = new Notification(title, { body });
      notification.show();
      activeNotifications.push(notification);
      notification.addEventListener('close', () => {
        const index = activeNotifications.indexOf(notification);
        if (index !== -1) {
          activeNotifications.splice(index, 1);
        }
      });
      return notification;
    }
    
  3. 批量关闭函数
    function clearAllNotifications() {
      activeNotifications.forEach(notification => {
        try {
          notification.close();
        } catch (err) {
          console.log('关闭通知出错:', err);
        }
      });
      activeNotifications.length = 0;
    }
    
    直接将这个函数绑定到页面按钮的点击事件,即可触发批量清除操作。

补充说明

  • Electron 12.2.1的Notification实例close()方法可正常关闭系统通知面板中的通知;
  • 加入try/catch是为了避免处理已被系统/用户关闭的实例时抛出错误;
  • 如果主进程和渲染进程都创建了通知,建议分别维护各自的实例数组,避免跨进程同步的复杂度。

内容的提问来源于stack exchange,提问作者Jignesh Tejani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 11:57:11