electron报错Error: Object has been destroyed

问题描述

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

  • 假如样式同步的过程中,我已经取到了当前所有的窗口,但在我循环通知其他窗口更新的过程中,某个窗口关闭了[销毁了],此时就会报错
    在这里插入图片描述

解决方案

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

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

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

 !currentWin.isDestroyed()

在这里插入图片描述

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值