在Electron中如何防止子窗口在父窗口关闭时关闭

3
我正在制作一个Electron应用程序。该应用有一种打开新窗口(弹出窗口)以在不同的监视器上拖动的方法。这个窗口有一种打开另一个窗口的方法,如此循环。我需要用户能够关闭他不想要的窗口,但保持其他窗口开启。
首先,我尝试使用window.open,但当父窗口被关闭时,子窗口也会关闭。我认为这是因为变量被垃圾回收了。
其次,我尝试在主进程中绑定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 是我赋予新窗口的一个属性。虽然这不是正确的方法,但可以完成工作。欢迎用正确的方式回答。


我相当确定问题出在您让浏览器上下文初始化新窗口的方式上,而不是使用IPC线程与主线程通信。 - mix3d
我在第13个电子中遇到了一个恶劣的情况,正好相反。附注:每个createNewWindow()将创建一个新的侦听器来创建一个新窗口。 - Андрей Сорока
1个回答

1

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

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

hideInsteadOfClose 是我给新建窗口的一个属性。虽然这不是正确的做法,但可以完成工作。

请随意回答正确的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接