Как отправить сообщение с главной страницы для рендеринга при закрытии электронного приложения - PullRequest
1 голос
/ 12 октября 2019

Я пытался отправить сообщение с основного на рендер, когда приложение закрывается с использованием веб-контента, но, похоже, нет события, когда он проверяет, закрыто ли приложение.

На основной

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!");
    });
});

Это работает, но я хочу, чтобы этот способ запускался при закрытии приложения. Но у веб-контента нет события закрытия, как в окне:

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

Ответы [ 2 ]

1 голос
/ 13 октября 2019

У меня вчера была точно такая же проблема, и я нашел способ ее решить. Функция 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');
    });
1 голос
/ 13 октября 2019

Возможно, я не понимаю, что вы пытаетесь сделать, но если вы пытаетесь отправить сообщение от основного процесса рендереру (ям) перед выходом, вы можете использовать. ,событие before-quit .

Event: 'before-quit'

Возвращает:

event Event

Передается до запуска приложениязакрывая свои окна. Вызов event.preventDefault () предотвратит поведение по умолчанию, которое завершает работу приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...