# electron_clock **Repository Path**: enzoism/electron_clock ## Basic Information - **Project Name**: electron_clock - **Description**: electron_clock - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-12-03 - **Last Updated**: 2026-02-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Electron03-系统通知小闹钟 > 练习使用Electron,在此记录学习过程  ---- # 1-参考网址 - electron中文官网:https://www.electronjs.org/zh/docs/latest - 禹神Electron视频教程地址:https://www.bilibili.com/video/BV1sE421N7M5 - 禹神Electron博文教程地址::https://blog.csdn.net/qq_33650655/article/details/140364298 - 当前博客代码实现地址:https://gitee.com/enzoism/electron_clock ----- # 2-快速入门 ## 1-快速动手验证 > 上手可以参考禹神Electron博文教程地址::https://blog.csdn.net/qq_33650655/article/details/140364298 ```shell # 1-init之后就一路回车即可 npm init # 2-按照package.json中的配置添加【index.js或者main.js】 # 3-可以在【index.js或者main.js】加一个打印 console.log("hello electron") # 4-添加start脚本 { "scripts": { "start": "electron ." } } # 5-直接运行项目 ump run start ``` ---- # 3-题目「 系统通知小闹钟 」  - 需求:输入倒计时秒数,点击“开始”后,主进程定时并在结束时弹出系统级通知(new Notification)。 - 技能点:主进程使用 Notification;双向通信(渲染 invoke,主进程 handle 并返回“已完成”)。 参考步骤: 1. 渲染页输入框 + 按钮 2. 渲染 invoke('start-timer', seconds) 3. 主进程 handle 里 setTimeout → new Notification({title:'时间到!'}) --- ## 1. 主进程代码 (main.js) ```javascript // main.js const {app, BrowserWindow, ipcMain, Notification} = require('electron'); const path = require('path'); let win; function createWindow() { win = new BrowserWindow({ width: 400, height: 800, webPreferences: { preload: path.join(__dirname, 'preload.js'), nodeIntegration: false, // 安全最佳实践 contextIsolation: true } }); // 窗口加载之后要加载的内容 win.loadFile(path.join(__dirname, 'pages/index/index.html')); win.openDevTools() //自动打开调试窗口 } /* ===== 核心:双向通信 ===== */ // 渲染进程 invoke('start-timer', 秒数) 会走到这里 ipcMain.handle('start-timer', async (event, seconds) => { return new Promise(resolve => { let remainingTime = seconds; // 立即发送一次初始时间 win.webContents.send('timer-update', remainingTime); // 每秒更新一次倒计时 const timer = setInterval(() => { remainingTime--; win.webContents.send('timer-update', remainingTime); // 当倒计时结束时 if (remainingTime <= 0) { clearInterval(timer); // 1. 系统级通知 new Notification({ title: '闹钟响了', body: `倒计时 ${seconds} 秒已结束!` }).show(); // 2. 把结果回传(resolve 会作为 invoke 的返回值) resolve('已完成'); } }, 1000); }); }); app.on('ready', () => { createWindow() //兼容核心代码1 app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) createWindow() }) }); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } }); ``` ## 2. 渲染进程代码 (index.html) ```html
>