electron 如何获取调用事件的BrowserWindow示例?

yvfmudvl  于 2023-06-20  发布在  Electron
关注(0)|答案(3)|浏览(312)

示例

您打开了多个BrowserWindows并将其存储在BrowserWindows数组中,您想知道哪个窗口调用了close事件,以便可以从数组中删除特定的BrowserWindow。

window.on('close', () => {
   // Get the instance of the window that called this event
})

怎么做

q7solyqu

q7solyqu1#

因为event.sender的类型是WebContents,所以你不能将它与BrowserWindow进行比较,除非你将event.senderBrowserWindow.webContents属性进行比较,但我猜这不会提供唯一的标识。解决方法是比较event.sender.idwindow.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
});
35g0bw71

35g0bw712#

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
});
2w3kk1z5

2w3kk1z53#

如果你只是想关闭,你可以这样做:

window.on ('close', (_event) => {
    _event.sender.close();
});

event.sender的类型为WebContents,这意味着您可以执行以下操作。你不需要一个BrowserWindows数组:

window.on ('close', (_event) => {
    const thatWindow = new BrowserWindow.fromWebContents(_event.sender);
    _event.sender?.close();
});

有了它,您就可以使用这样的BrowserWindow执行任何可能的操作
另请参阅:文档- BrowserWindow.fromWebContents()

相关问题