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

nw.js打印完成后自动关闭窗口的原生实现方案咨询

解决方案

你要的原生实现有两种可靠方案,完全不需要依赖定时器做延迟:


方案1:监听页面原生afterprint事件

Chromium内核原生支持afterprint事件,会在打印任务处理完成(包括打印提交到系统队列、用户手动取消打印弹窗)后触发,静默打印和普通打印场景都能生效,仅需要修改print.html代码即可:

var div = document.getElementById("orderBill");
div.innerHTML = '<h1>Header</h1><p>Some text</p>';
var win = nw.Window.get();

// 打印完成事件触发后直接关闭窗口
window.addEventListener('afterprint', () => {
    win.close();
});

方案2:使用NW.js print方法自带的回调

NW.js的Window.print方法本身支持传入第二个参数作为打印完成的回调,直接在父窗口逻辑里处理窗口关闭即可,不需要修改print.html的代码:
修改父窗口代码:

nw.Window.open('print.html', {show: false, new_instance: false}, function(new_win) {
    new_win.on('loaded', function() {
      // 第二个参数为打印完成后的回调函数
      this.print({autoprint: true, headerFooterEnabled: false}, () => {
          new_win.close();
      });
    });
});

两种方案都完全和打印任务的生命周期绑定,不会受主线程阻塞影响,也不会出现固定延迟时长不合理的问题。你可以根据自己的代码逻辑分工选择:如果希望打印相关的逻辑都收敛在print.html内就选方案1,如果希望窗口生命周期统一由父窗口管理就选方案2。

内容的提问来源于stack exchange,提问作者Abu Nooh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:36:05