电子| onbeforeunload防止重新加载

时间:2018-09-04 14:57:10

标签: electron

我正在尝试开发一个具有单独设置窗口(以电子方式)的应用。当设置窗口打开而主窗口关闭时,我想防止主窗口关闭并集中设置窗口。

现在我按如下操作:

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

这虽然可以防止重新加载窗口,但我不希望这样做。 因此,我要求一种不同的预防方法或一种方法来检测它是重新加载还是关闭。

问候伊莱亚斯=)

编辑/解决方案: 利用ipcMainipcRenderer在主流程中创建窗口来处理所有事情。您可以在那里捕获并阻止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 :(得分:0)

Soo经过多次尝试和错误后,我发现这可行:

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

很高兴我终于找到了解决方案:)

答案 1 :(得分:0)

您可以使用'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
  })
})