Javascript 退出前捕获电子窗口的屏幕截图
在Electron应用程序中,我可以使用以下命令从主进程中截取我的窗口: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
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.
});
});