NW.js 中如何正确监听窗口关闭事件? A. 园园 提问于 2026-03-08 19:46:22 阅读 13 框架 我在用 NW.js 做一个桌面应用,想在用户点击窗口右上角的关闭按钮时弹出确认对话框,但试了几次都没生效。我用了 win.on('close', ...),但窗口还是直接关了,根本没触发回调。 我的代码大概是这样: const win = nw.Window.get(); win.on('close', () => { if (confirm('确定要退出吗?')) { win.close(true); } }); 是不是哪里写错了?或者这个事件根本不是这么用的? NW.js桌面应用 我来解答 赞 5 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 A. 志鸽 Lv1 啊,NW.js的窗口关闭事件确实有点坑。你这个写法基本是对的,但漏了个关键点:默认行为拦截。窗口关闭事件发生时,NW.js会直接执行关闭操作,除非你显式告诉它别关。 试试这样改: const win = nw.Window.get(); win.on('close', (e) => { if (!confirm('确定要退出吗?')) { // 重点在这里!阻止默认关闭行为 e.preventDefault(); } }); 安全提醒:这种确认对话框其实防不了高手,用户可以直接在开发者工具里把整个事件监听干掉。如果要实现真正的安全退出确认(比如防止数据丢失),最好在业务逻辑层加个状态检查。 顺便吐槽下,NW.js的文档有时候写得跟谜语似的,这个preventDefault的用法我当初也是debug了好久才发现的... 回复 点赞 2026-03-08 20:00 加载更多 相关推荐 2 回答 78 浏览 为什么我的Node.js事件监听在第二次触发时不执行? 我在用Node.js的EventEmitter写一个消息队列处理模块,发现第一次触发事件时能正常执行监听函数,但第二次触发就完全没反应了。 代码大概是这样写的: const EventEmitter ... UP主~艳珂 前端 2026-01-29 21:39:38 2 回答 42 浏览 Dash.js在React中监听缓冲事件不触发怎么办? 我用Dash.js在React里做视频播放,想监听缓冲开始事件来显示加载提示。按照文档写了事件绑定,但控制台一直没输出,是哪里漏了吗? import React, { useRef, useEffec... 圣哲 交互 2026-01-27 18:18:31 2 回答 35 浏览 AppJS窗口调整大小后按钮点击事件失效怎么办? 折腾了一下午AppJS,遇到个怪问题。我用app.window创建窗口后,给按钮绑定了点击事件,正常显示时能触发。但只要在窗口resize事件里调整过大小,按钮就完全没反应了。 代码是这样写的: co... 迷人的殿原 框架 2026-02-12 12:09:34 2 回答 105 浏览 AppJS窗口无法正确应用自定义CSS样式,怎么办? 用AppJS开发桌面应用时,设置窗口透明样式一直不生效。我按文档把CSS写进style.css: body { background: rgba(255,255,255,0.5); backdrop-... 设计师锦玉 框架 2026-01-31 19:53:22 1 回答 11 浏览 Node.js 中如何正确设计多级路由结构? 我正在用原生 Node.js 写一个后端服务,想把用户相关的接口放在 /api/users 下,但不知道怎么组织路由文件才清晰。现在所有逻辑都堆在主入口里,代码越来越乱。 试过自己写中间件匹配路径前缀... Mr-采涵 前端 2026-03-13 15:33:20 1 回答 5 浏览 Draft.js 中如何正确处理空格和换行的保存问题? 我在用 Draft.js 做一个富文本编辑器,内容保存到后端时发现连续空格和换行经常被吃掉。比如用户输入了多个空格或回车,转成 HTML 后就变成一个或者直接没了,这体验很不好。 我试过用 conve... 上官照涵 组件 2026-03-12 12:30:20 2 回答 14 浏览 Next.js中如何正确处理登录后的页面跳转? 我在用Next.js做用户登录,调用API成功后想跳转到首页,但用router.push没反应,页面卡在登录页不动。 我试过在useEffect里判断isAuthenticated然后跳转,也试过直接... 百里立顺 框架 2026-03-08 13:33:20 2 回答 13 浏览 Egg.js 中如何正确处理跨域请求? 我在用 Egg.js 写后端接口,前端本地开发时请求总是被拦,控制台报 CORS 错误。试过在 config/config.default.js 里加 config.cors = { origin: ... 凡敬🍀 前端 2026-03-08 09:07:16 2 回答 30 浏览 Vite多页应用中如何正确配置不同页面的入口JS文件? 我用 Vite 搭建一个多页项目,每个页面都有自己的 JS 入口,但打包后发现只有 index.html 的脚本能正常加载,其他页面比如 about.html 引用的 about.js 找不到。我在 ... Mc.邦威 前端 2026-02-26 14:30:27 2 回答 14 浏览 Hotkeys.js 为什么监听 Ctrl+Enter 没反应? 我用 Hotkeys.js 想监听 Ctrl+Enter 组合键,但死活不触发回调,其他快捷键比如 'a' 或 'ctrl+a' 都正常。 代码是这样写的:hotkeys('ctrl+enter', ... 钰岩🍀 交互 2026-02-25 07:16:18
试试这样改:
安全提醒:这种确认对话框其实防不了高手,用户可以直接在开发者工具里把整个事件监听干掉。如果要实现真正的安全退出确认(比如防止数据丢失),最好在业务逻辑层加个状态检查。
顺便吐槽下,NW.js的文档有时候写得跟谜语似的,这个preventDefault的用法我当初也是debug了好久才发现的...