electron报错Error: Object has been destroyed

文章目录

    • 问题描述
    • 解决方案

问题描述

在 Electron 中,当一个窗口被销毁后,与该窗口相关联的 JavaScript 对象也会被销毁,再次访问已被销毁的窗口对象时,会导致 Error: Object has been destroyed 错误。
例如之前在写多窗口pinia状态同步 / 多窗口样式同步的时候,有如下代码:

  • 假如样式同步的过程中,我已经取到了当前所有的窗口,但在我循环通知其他窗口更新的过程中,某个窗口关闭了[销毁了],此时就会报错
    electron报错Error: Object has been destroyed_第1张图片

解决方案

为了避免该错误的发生,需要在窗口对象被销毁时,取消订阅所有与该窗口相关的事件,并在需要访问窗口对象时,先检查窗口对象是否已经被销毁。
1.创建窗口的时候,补充销毁监听:

  currentWindow.on("closed", () => {
    // 在窗口对象被关闭时,取消订阅所有与该窗口相关的事件
    currentWindow.removeAllListeners();
    currentWindow= null;
  });

2.调用窗口方法前,先进行销毁判断

 !currentWin.isDestroyed()

electron报错Error: Object has been destroyed_第2张图片

你可能感兴趣的:(electron,javascript,前端,报错,BUG)