NW.js 中如何正确监听窗口关闭事件?

A. 园园 阅读 13

我在用 NW.js 做一个桌面应用,想在用户点击窗口右上角的关闭按钮时弹出确认对话框,但试了几次都没生效。我用了 win.on('close', ...),但窗口还是直接关了,根本没触发回调。

我的代码大概是这样:

const win = nw.Window.get();
win.on('close', () => {
  if (confirm('确定要退出吗?')) {
    win.close(true);
  }
});

是不是哪里写错了?或者这个事件根本不是这么用的?

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
A. 志鸽
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