ウェブコンテンツを使用してアプリを閉じるときにメインからレンダリングにメッセージを送信しようとしていますが、アプリが閉じたかどうかを確認するイベントがないようです。
メインで
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()メソッドを呼び出します。無限ループで続くcloseイベントをもう一度呼び出します。これを防ぐには、イベントが2回呼び出されているかどうかを確認して、最終的にアプリを閉じる必要があります。これがお役に立てば幸いです。
メインプロセスについて:
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');
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加