我有一个Electron应用程序需要在用户关闭时保存一些数据(例如,在用户点击"关闭"按钮之后).
数据在渲染器进程中可用,因此应在应用程序终止之前通知它.
浏览器窗口的电子API提到了一个close方法,但似乎这是由主进程完成的,而不是渲染器(如果我没有记错的话).
我尝试使用WebContents.send主进程来通知渲染器进程,但似乎是因为消息是异步的,所以应用程序在渲染器进程有时间实际执行操作之前关闭.
到目前为止,对我有用的最简单的解决方案包括执行以下操作:
close事件,当它发生时,它通过webContents向渲染器进程发送消息.它还可以通过调用阻止应用程序立即关闭event.preventDefault();close事件通知时,它保存其数据,然后向主进程发送IPC消息(例如closed);ipcMain.on),所以当closed消息到达时,它最终关闭程序(例如,通过app.quit()).请注意,如果我理解正确,调用会app.quit()向closeBrowserWindow 发送另一个事件,因此它将循环,除非您以某种方式阻止它.我使用了一个脏黑客(第二次close调用事件时退出,不调用event.preventDefault()),但必须存在更好的解决方案.
您可以只在渲染器过程中使用正常unload或beforeunload事件:
window.addEventListener('unload', function(event) {
// store data etc.
})
Run Code Online (Sandbox Code Playgroud)