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
相关产品推荐
相关产品推荐

