gpt4 book ai didi

node.js - 当 Electron 应用程序关闭时,如何从 main 发送消息进行渲染

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:35 26 4
gpt4 key购买 nike

当应用程序使用 webcontents 关闭时,我一直在尝试从主程序向渲染器发送消息,但它似乎没有检查应用程序是否关闭的事件。

主要内容

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 似乎没有像窗口那样有“关闭”事件:

mainWindow.on('close', () => {
console.log("Run right before the app is closed");
});

最佳答案

我昨天也遇到了同样的问题,我找到了解决的方法。 “e.preventDefault() 会阻止窗口实际关闭,因此它有时间将消息发送到渲染器进程。当主进程从渲染器进程接收到消息时,它会调用 app.quit() 方法。这在然后再次调用关闭事件,该事件会无限循环。为了防止这种情况,您必须检查该事件是否被第二次调用以最终关闭应用程序。希望这会有所帮助!

在主进程上:

const ipc = require('electron').ipcMain;
let status = 0;

mainWindow.on('close', function (e) {
if (status == 0) {
if (mainWindow) {
e.preventDefault();
mainWindow.webContents.send('app-close');
}
}
})

ipc.on('closed', _ => {
status = 1;
mainWindow = null;
if (process.platform !== 'darwin') {
app.quit();
}
})

关于渲染器进程:

const electron = require('electron');
const ipc = electron.ipcRenderer;

ipc.on('app-close', _ => {

//do something here...

ipc.send('closed');
});

关于node.js - 当 Electron 应用程序关闭时,如何从 main 发送消息进行渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58357138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com