NW.js 中如何正确监听窗口关闭事件? A. 园园 提问于 2026-03-08 19:46:22 阅读 51 框架 我在用 NW.js 做一个桌面应用,想在用户点击窗口右上角的关闭按钮时弹出确认对话框,但试了几次都没生效。我用了 win.on('close', ...),但窗口还是直接关了,根本没触发回调。 我的代码大概是这样: const win = nw.Window.get(); win.on('close', () => { if (confirm('确定要退出吗?')) { win.close(true); } }); 是不是哪里写错了?或者这个事件根本不是这么用的? NW.js桌面应用 我来解答 赞 12 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 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 加载更多 相关推荐 1 回答 93 浏览 NW.js 中如何正确调用原生窗口的最小化功能? 我在用 NW.js 开发一个桌面应用,想通过按钮点击让窗口最小化,但试了几次都不行。 我查了文档,写了这段代码:nw.Window.get().minimize();,可点击后没反应,控制台也没报错,... 诸葛园园 框架 2026-03-21 22:41:16 2 回答 66 浏览 NW.js 中如何正确调用原生文件对话框? 我在 NW.js 里想弹出系统默认的文件选择窗口,但试了几次都不行。 查文档说要用 nw.Window.get().showOpenDialog(),但一调用就报错说 showOpenDialog 不... 小翌菡 框架 2026-03-26 09:23:19 2 回答 56 浏览 Video.js 如何监听视频播放结束事件? 我用 Video.js 做了个播放器,想在视频播完后自动跳转页面,但试了几次都没触发结束事件。官方文档说用 ended 事件,但我这么写好像没生效: const player = videojs(... Top丶明月 交互 2026-03-24 21:38:20 2 回答 105 浏览 为什么我的Node.js事件监听在第二次触发时不执行? 我在用Node.js的EventEmitter写一个消息队列处理模块,发现第一次触发事件时能正常执行监听函数,但第二次触发就完全没反应了。 代码大概是这样写的: const EventEmitter ... UP主~艳珂 前端 2026-01-29 21:39:38 2 回答 84 浏览 Dash.js在React中监听缓冲事件不触发怎么办? 我用Dash.js在React里做视频播放,想监听缓冲开始事件来显示加载提示。按照文档写了事件绑定,但控制台一直没输出,是哪里漏了吗? import React, { useRef, useEffec... 圣哲 交互 2026-01-27 18:18:31 2 回答 63 浏览 AppJS窗口调整大小后按钮点击事件失效怎么办? 折腾了一下午AppJS,遇到个怪问题。我用app.window创建窗口后,给按钮绑定了点击事件,正常显示时能触发。但只要在窗口resize事件里调整过大小,按钮就完全没反应了。 代码是这样写的: co... 迷人的殿原 框架 2026-02-12 12:09:34 2 回答 144 浏览 AppJS窗口无法正确应用自定义CSS样式,怎么办? 用AppJS开发桌面应用时,设置窗口透明样式一直不生效。我按文档把CSS写进style.css: body { background: rgba(255,255,255,0.5); backdrop-... 设计师锦玉 框架 2026-01-31 19:53:22 2 回答 60 浏览 Cesium中如何正确加载本地GeoJSON数据? 我在用Cesium加载本地的GeoJSON文件时总是失败,控制台报错说找不到资源。明明路径是对的,也试过把文件放public目录下,但还是不行。 我用的是Vite搭建的项目,是不是需要特殊配置?下面是... 宇文恒菽 交互 2026-03-30 13:52:19 1 回答 36 浏览 Analog SSR 中如何正确引入第三方 JS 库? 我在用 Analog 做一个 SSR 项目,想引入一个非模块化的第三方 JS 库(比如某个图表插件),但直接在组件里 import 报错说 window 未定义。 试过在 onClient 里动态加载... 思佳 Dev 框架 2026-03-26 01:05:19 1 回答 49 浏览 Hotkeys.js 为什么监听 Ctrl+Enter 不生效? 我用 Hotkeys.js 想监听 Ctrl+Enter 组合键提交表单,但怎么按都没反应,其他快捷键比如 'a' 或 'ctrl+s' 都能正常触发。是不是组合键写法有问题? 我试过写成 'ctrl... Zz晨硕 交互 2026-03-22 23:11:18
试试这样改:
安全提醒:这种确认对话框其实防不了高手,用户可以直接在开发者工具里把整个事件监听干掉。如果要实现真正的安全退出确认(比如防止数据丢失),最好在业务逻辑层加个状态检查。
顺便吐槽下,NW.js的文档有时候写得跟谜语似的,这个preventDefault的用法我当初也是debug了好久才发现的...