【问题标题】:Object has been destroyed when open secondary/child window in electron js在电子 js 中打开辅助/子窗口时对象已被破坏
【发布时间】:2016-11-13 12:52:12
【问题描述】:

在主窗口中,当单击按钮时,将通过 ipc 调用弹出第二个/子窗口。 这在第一次打开弹出窗口时有效。如果我关闭弹出窗口并重新打开它,我会收到此错误:

未捕获的异常:错误:对象已在错误处被销毁(本机) 在 EventEmitter。 (/home/xxxx/electron/fin/main.js:36:21) 在 emitOne (events.js:96:13) 在 EventEmitter.emit (events.js:188:7) 在 事件发射器。 (/home/xxxx/electron/fin/node_modules/electron-prebuilt/dist/resources/electron.asar/browser/api/web-contents.js:156:13) 在 emitTwo (events.js:106:13) 在 EventEmitter.emit (events.js:191:7)

#main.js on app ready:
mainWindow = new BrowserWindow({width: 800, height: 600})


  mainWindow.loadURL(`file://${__dirname}/index.html`)


  mainWindow.webContents.openDevTools()


  mainWindow.on('closed', function () {

    mainWindow = null
  })

  let popWindow = new BrowserWindow({parent: mainWindow, width: 450, height: 450, show: false});
  popWindow.loadURL(`file://${__dirname}/app/pop.html`);
  popWindow.webContents.openDevTools();

  ipc.on('toggle-popwindow', function(){
         popWindow.show();    
  });

当我在“关闭”方法中添加 hide() 时:

popWindow.on('closed', function (event) {
popWindow.hide();
});

我明白了:

Uncaught Exception:
Error: Object has been destroyed

有什么问题?

【问题讨论】:

    标签: javascript node.js electron


    【解决方案1】:

    如果您关闭浏览器窗口,它将被销毁,因此您无法在此之后再次隐藏或显示它。由于您想隐藏它并稍后再次显示它,您应该为close event 添加一个侦听器,该侦听器调用preventDefault() 并隐藏窗口而不是关闭它。

    【讨论】:

      【解决方案2】:

      当popWindow 关闭时,你应该将popWindow 设置为null。当ipc下一次打开请求时,再次实例化popWindow。

      mainWindow = new BrowserWindow({width: 800, height: 600})
      
      
      mainWindow.loadURL(`file://${__dirname}/index.html`)
      
      
      mainWindow.webContents.openDevTools()
      
      
      mainWindow.on('closed', function () {
      
        mainWindow = null
        popWindow=null;
      })
      
      ipc.on('toggle-popwindow', function(){
          if(!popWindow){
            openPopWindow(function(){
                  popWindow.show();    
            });
          } else{
              popWindow.show();    
          }
      });
      
      function openPopWindow(callback){
        let popWindow = new BrowserWindow({parent: mainWindow, width: 450, height: 450, show: false});
          popWindow.loadURL(`file://${__dirname}/app/pop.html`);
          popWindow.webContents.openDevTools();
      
        popWindow.webContents.on('did-finish-load', function () {
          if (typeof callback == 'function') {
            callback();
          }
        });
      
          // set to null
        popWindow.on('close', () => {
          popWindow = null;
        });
      
          // set to null
        popWindow.on('closed', () => {
          popWindow = null;
        });
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 2023-04-01
        • 2021-11-05
        • 1970-01-01
        • 1970-01-01
        • 2019-03-26
        • 1970-01-01
        相关资源
        最近更新 更多