多窗口管理:从窗口列表中删除窗口

时间:2017-09-14 07:43:06

标签: javascript node.js electron

描述

在我的Electron程序中,我将所有可见的渲染器窗口存储在主进程中的单链表中。 创建一个新的时,它会被添加到列表中,但我不知道如何在它们关闭时再次从列表中删除它们(找出要分别删除的列表元素)。

主要流程中的代码

global.windows = new LinkedList();

function createWindow(p_URL, p_width, p_height, p_x, p_y, p_minWidth, p_minHeight, p_parent, p_icon) {
  // Create the browser window.
  let win;
  win = new BrowserWindow({width: p_width, height: p_height, minWidth: p_minWidth, minHeight: p_minHeight, parent: p_parent, icon: p_icon, show: false});

  global.windows.insert(win);
  if(p_URL !== undefined)
    win.loadURL(p_URL)

  win.once('ready-to-show', () => {
    win.show()
  });


    console.log("added: size = " + global.windows.getSize());

  win.on('closed', () => {
    console.log("removeStart: size = " + global.windows.getSize());
    // Dereference the window object

    let i;
    for(i = global.windows.getHeadNode(); i.getData() !== win; i = i.next);

    if(i >= global.windows.getSize())
      console.log("Error");
    else
      global.windows.removeAt(i);

    console.log("i: " + i);
    console.log("removeEnd: size = " + global.windows.getSize());
    win = null;
  });

  return win;
}

问题

我尝试通过遍历列表来执行此操作,直到找到要删除的元素然后将其删除。当我现在执行程序然后关闭其中一个窗口时,我收到以下错误。

Uncaught Exception:
Error: Object has been destroyed
    at Error (native)

if(i >= global.windows.getSize())上的eventlistener中的行closed引起。该行之前的日志命令会产生输出,但是后面的日志命令不会执行任何操作。没有元素从列表中删除。 我究竟做错了什么?是否有更好的方法来管理窗口?

0 个答案:

没有答案