阻止在Electron中关闭父窗口时关闭子窗口

时间:2019-05-13 15:42:25

标签: javascript electron

我正在制作一个电子应用程序。该应用程序可以打开一个新窗口(弹出窗口),以将其拖动到其他显示器上。此窗口可以打开另一个窗口,依此类推。我需要用户能够关闭他不想要的窗口,但让其他人保持打开状态。

首先,我尝试了window.open,但是当父窗口关闭时,子窗口也被关闭了。我以为一定是因为var收集到垃圾了。

第二,我尝试在主流程中绑定到new-window事件。 这就是我所做的:

let windows = [];

function createNewWindow(){
  let win = new BrowserWindow(
    {
      width: 1600,
      height: 900,
      webPreferences: {
        nodeIntegration: true
      }
    }
  );

  win.webContents.on('new-window', (event, url) => {
    event.preventDefault()

    let win = createNewWindow();
    win.loadURL(url);
    event.newGuest = win;
  })

  windows.push(win);

  return win;
}

但是,当父母关闭时,孩子也关闭了。我检查了windows变量,但它已正确保留在主进程中,因此这应该不是GC问题。

在关闭主父窗口时,如何在不关闭的情况下打开一系列窗口(有或没有window.open)?

编辑

由于我没有找到使窗口保持打开状态的方法,因此我决定隐藏窗口而不是关闭它们。这就是我所做的:

  win.on("close", (event) => {
    if (win.hideInsteadOfClose == true) {
      event.preventDefault();
      win.hide();
    }
  });

hideInsteadOfClose是我赋予创建的新窗口的属性。这不是正确的方法,但是可以完成工作。请随时以正确的方式回答。

1 个答案:

答案 0 :(得分:0)

由于我没有找到使窗口保持打开状态的方法,因此我决定隐藏窗口而不是关闭它们。这就是我所做的:

  win.on("close", (event) => {
    if (win.hideInsteadOfClose == true) {
      event.preventDefault();
      win.hide();
    }
  });

hideInsteadOfClose是我赋予创建的新窗口的属性。这不是正确的方法,但是可以完成工作。

请随时以正确的方式回答。