Электрон | onbeforeunload предотвращает перезагрузку - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь разработать приложение с отдельным окном настроек (в электронном виде). Когда окно настроек открыто и главное окно закрыто, я хочу предотвратить закрытие главного окна и сфокусировать окно настроек.

Сейчас я делаю это следующим образом:

window.onbeforeunload = e => {
    console.log(e);
    if(settingsWindow) {
        settingsWindow.focus();
        e.returnValue = false;
    }
    else e.returnValue = true;
};

Это предотвращает перезагрузку окна, чего я не хочу. Поэтому я прошу другой метод предотвращения или способ определить, является ли это перезагрузкой или закрытием.

Приветствие Ильи =)

EDIT / Решение: используйте ipcMain и ipcRenderer для обработки всего с созданием окон в основном процессе. Там вы можете поймать и предотвратить событие close.

MAIN.JS

const {ipcMain} = require("electron");
...
ipcMain.addListener("ASYNC_MSG", (event, arg) => {
    switch(arg) {
        case "OPEN_SETTINGS": createSettingsWindow(); break;
    }
});

...

mainWindow.addListener("close", e => {
    if(settingsWindow) {
        e.preventDefault();
        e.returnValue = false;
        settingsWindow.focus();
    }
    else e.returnValue = true;

});

RENDERER.JS

const {ipcRenderer} = require("electron");
...
ipcRenderer.send("ASYNC_MSG", "OPEN_SETTINGS");

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вы можете использовать событие 'close', которое вызывается до onbeforeunload и не конфликтует с перезагрузкой

const { app, BrowserWindow } = require('electron')

app.once('ready', () => {
  let main = new BrowserWindow({title: 'main'})
  let settings = new BrowserWindow({title: 'settings'})

  main.on('close', (event) => {
    if (settings) {
      event.preventDefault()
      event.returnValue = false
      settings.focus()
    } else {
      event.returnValue = true
    }
  })
  settings.on('closed', () => {
    settings = null
  })
})
0 голосов
/ 04 сентября 2018

Су после еще нескольких проб и ошибок я обнаружил, что это работает:

window.onbeforeunload = e => {
    console.log(e);
    if(settingsWindow) {
        settingsWindow.focus();
        e.returnValue = false;
    }
    - else e.returnValue = true;
    + else window.destroy();
};

Рад, что наконец-то нашел решение :)

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