我一直试图在应用程序关闭时使用webcontents从main向render发送消息,但它似乎没有检查应用程序是否关闭的事件。
在主要
mainWindow.webContents.on('did-stop-loading', () => {
mainWindow.webContents.send('ping', 'save!')
});
在渲染器上
require('electron').ipcRenderer.on('ping', (event, message) => {
console.log(message) // Prints 'save!'
// Save json to a file.
fs.writeFile("library.json", 'json', function(err) {
if(err) {
return console.log(err);
}
console.log("Library Saved!");
});
});
这是可行的,但我想知道当应用程序关闭时,它是如何运行的。但webcontents似乎没有像windows那样的“close”事件:
mainWindow.on('close', () => {
console.log("Run right before the app is closed");
});
2条答案
按热度按时间jvlzgdj91#
我昨天也遇到了同样的问题,我已经找到了解决这个问题的方法。“e.预防默认()阻止窗口实际关闭,以便有时间将消息发送到渲染器进程。当主进程从渲染器进程接收到消息时,它会调用应用程序。quit()方法。这又会再次调用close事件,并在无限循环中继续。为了防止出现这种情况,您必须检查是否第二次调用该事件以最终关闭应用程序。希望这有帮助!
在主进程上:
在渲染器进程上:
wlzqhblo2#
我可能不明白你想做什么--但是如果你想在退出之前从主进程发送一个消息给渲染器,你可以使用. .. before-quit事件。
事件:“退出前”
退货:
在应用程序开始关闭其窗口之前发出。调用event.preventDefault()将阻止终止应用程序的默认行为。