Javascript 退出前捕获电子窗口的屏幕截图

Javascript 退出前捕获电子窗口的屏幕截图,javascript,electron,Javascript,Electron,在Electron应用程序中,我可以使用以下命令从主进程中截取我的窗口: let win = new BrowserWindow(/* ... */); let capturedPicFilePath = /* where I want that saved */ win.capturePage((img) => { fs.writeFile(capturedPicFilePath, img.toPng(), () => console.log(`Saved ${captur

在Electron应用程序中,我可以使用以下命令从主进程中截取我的窗口:

let win = new BrowserWindow(/* ... */);
let capturedPicFilePath = /* where I want that saved */
win.capturePage((img) => {
    fs.writeFile(capturedPicFilePath, img.toPng(), () => console.log(`Saved ${capturedPicFilePath}`))
})
太棒了。现在我想在应用程序退出之前就这么做。电子会发出一个信号,我试着用它:

事件:
'before-quit'
:在应用程序开始关闭其窗口之前发出

问题:如果我在该事件的处理程序中使用与上面相同的代码,则会创建该文件,但为空

我猜这是因为截图是以异步方式拍摄的,当截图发生时窗口已经关闭

所以这对我来说不起作用:

app.on('before-quit', (event) => {
    win.capturePage(function(img) {
        fs.writeFile(capturedPicFilePath, img.toPng(), () => console.log(`Saved ${capturedPicFilePath}`))
    })
})
编辑1:使用
窗口在渲染器进程中执行此操作。onbeforeunload
也会失败。现在进行截图也太晚了。我在主控制台中得到这个(即,它进入终端):

试图在已关闭或释放的渲染器窗口中调用函数

背景:现在我正在探索屏幕捕获的局限性(基本上是为了支持),并发现了一个。我还不确定我会如何处理这个边缘案例,我考虑过它,不仅仅是为了支持,我还考虑在启动时显示一张以前状态的模糊图片(我的应用程序的某些部分需要1-2秒才能加载)


有什么想法吗?

我以前也遇到过类似的问题,我通过使用window close事件,然后阻止它关闭来解决这个问题。执行操作后,我运行
app.quit()


希望这有帮助

非常感谢!我接受了您的答案,但我必须添加一个布尔值保护,以避免在关闭事件上循环→ 退出→ 闭幕式→ 退出我在上面的片段中做的方式与我实际做的略有不同,但想法就在这里。(该编辑仍有待同行审查)
window.on('close', function (event) {
    event.preventDefault();

    let capturedPicFilePath = /* where you want it saved */
    window.capturePage((img) => {
        fs.writeFile(capturedPicFilePath, img.toPng(), () => 
        console.log(`Saved ${capturedPicFilePath}`));

        app.quit(); // quit once screenshot has saved.
    });
});