【发布时间】:2026-01-20 21:05:03
【问题描述】:
示例
您有多个 BrowserWindows 打开并存储在 BrowserWindows 数组中,您想知道哪个窗口调用了关闭事件,以便可以从数组中删除该特定 BrowserWindow。
window.on('close', () => {
// Get the instance of the window that called this event
})
怎么做?
【问题讨论】:
标签: electron
示例
您有多个 BrowserWindows 打开并存储在 BrowserWindows 数组中,您想知道哪个窗口调用了关闭事件,以便可以从数组中删除该特定 BrowserWindow。
window.on('close', () => {
// Get the instance of the window that called this event
})
怎么做?
【问题讨论】:
标签: electron
由于event.sender 其类型为WebContents,因此您无法将其与BrowserWindow 进行比较,只有将event.sender 与BrowserWindow.webContents 属性进行比较,但我想这不会提供唯一标识。一种解决方法是将event.sender.id 与window.id 进行比较
window.on ('close', (event) => {
// Use event.sender to get the instance of the window that called this event
console.log (event.sender.id === window.id); // -> true
});
【讨论】:
event.sender 甚至存在,我使用typscript 并且虽然BrowserWindow 有许多方法覆盖,但回调的第一个参数始终是Event 类型的事件,它不是 完全包含发件人。奇怪。
BrowserWindow 是一个EventEmitter;因此,窗口的实例方法on在回调函数中返回一个event参数,您可以通过event.sender属性访问窗口的实例。
window.on ('close', (event) => {
// Use event.sender to get the instance of the window that called this event
console.log (event.sender instanceof BrowserWindow); // -> true
console.log (event.sender === window); // -> true
});
【讨论】:
event.sender它的类型WebContents,怎么可能是===到BrowserWindow? BrowserWindow 有一个名为 webContents 的属性,但这会提供唯一标识吗?
console.log (event.sender instanceof BrowserWindow),它也返回了true ...只是出于好奇,您是如何获得event.sender 的WebContents 类型的?
event.sender 和 event.sender.id,所以...非常感谢 :D