在 Electron 中单击按钮重新打开 BrowserWindow 后,对象已被销毁异常

Posted

技术标签:

【中文标题】在 Electron 中单击按钮重新打开 BrowserWindow 后,对象已被销毁异常【英文标题】:Object has been destroyed Exception after reopen BrowserWindow on button click in Electron 【发布时间】:2018-05-28 03:24:03 【问题描述】:

我是 Electron 框架的新手,使用 Electron 开发简单的桌面应用程序。 问题是,当我在电子应用程序中打开一个新窗口并使用菜单栏关闭按钮关闭它并再次尝试打开它时,它会抛出“对象已被破坏异常”。即使单击关闭按钮,我如何保留 BrowserWindow 对象???

【问题讨论】:

请出示您的代码 【参考方案1】:

如果有人遇到此问题,而其他答案没有帮助。我在处理关闭窗口时遇到了类似的问题。我通过使用window.destroy() 而不是window.close() 来修复它

【讨论】:

【参考方案2】:

BrowserWindow 对象应该在关闭时被销毁。您需要在重新打开时实例化一个新的,而不是尝试重用该引用。

编辑:

如何实例化它取决于你是从主进程(即“Main.js”)还是渲染器进程中进行实例化。

从主进程来看,它看起来像:

var electron = require("electron");
var url = require("url");
var path = require("path");
var newWindow = new electron.BrowserWindow(
    width: 700,
    height: 500
);

newWindow.loadURL(url.format(
    pathname: path.join(__dirname, '/SomeStuff.html'),
    protocol: 'file:',
    slashes: true
));

如果从渲染器进程实例化,则需要使用“远程”对象来访问主进程。所以它会是这样的:

var newWindow = new electron.remote.BrowserWindow(
    width: 700,
    height: 500
);

【讨论】:

我知道它的对象在关闭后已经被销毁了,但是我应该在哪里再次实例化它呢?单击按钮后尝试实例化但给出“BrowserWindow 不是构造函数”错误 我添加了一个例子。第一篇文章我在手机上。希望有帮助!

以上是关于在 Electron 中单击按钮重新打开 BrowserWindow 后,对象已被销毁异常的主要内容,如果未能解决你的问题,请参考以下文章

在 Electron 中单击时 ReactJs 无法调用 express API

Activity 会根据单击后退按钮时打开的次数自行重新打开

如何在输入文本区域中创建 Enter 事件以使用 Vue.js 和 Electron 按下按钮

我想从片段中隐藏片段容器视图(在 MainActivity 布局内),但是当我单击任务按钮然后重新打开应用程序时它不起作用

electron-vue中点击按钮,实现打开程序目录里面的某个文件

ios主屏幕重新命名