关闭应用程序并通知渲染器进程

ano*_*nol 4 electron

我有一个Electron应用程序需要在用户关闭时保存一些数据(例如,在用户点击"关闭"按钮之后).

数据在渲染器进程中可用,因此应在应用程序终止之前通知它.

浏览器窗口电子API提到了一个close方法,但似乎这是由主进程完成的,而不是渲染器(如果我没有记错的话).

我尝试使用WebContents.send主进程来通知渲染器进程,但似乎是因为消息是异步的,所以应用程序在渲染器进程有时间实际执行操作之前关闭.

ano*_*nol 6

到目前为止,对我有用的最简单的解决方案包括执行以下操作:

  1. 在主进程中,BrowserWindow侦听close事件,当它发生时,它通过webContents向渲染器进程发送消息.它还可以通过调用阻止应用程序立即关闭event.preventDefault();
  2. 渲染器进程始终监听来自主进程的IPC消息,然后当它接收到close事件通知时,它保存其数据,然后向主进程发送IPC消息(例如closed);
  3. 主进程先前设置了一个钩子来监听渲染器的IPC消息(ipcMain.on),所以当closed消息到达时,它最终关闭程序(例如,通过app.quit()).

请注意,如果我理解正确,调用会app.quit()closeBrowserWindow 发送另一个事件,因此它将循环,除非您以某种方式阻止它.我使用了一个脏黑客(第二close调用事件时退出,不调用event.preventDefault()),但必须存在更好的解决方案.


flo*_*ori 5

您可以只在渲染器过程中使用正常unloadbeforeunload事件:

window.addEventListener('unload', function(event) {
  // store data etc.
})
Run Code Online (Sandbox Code Playgroud)