如何使用多个mainWindow实例创建一个功能良好的电子应用程序?这里有一个非常简单的应用程序,它有一个mainWindow,只有两个按钮。一个用于创建新的mainWindow实例,另一个用于关闭当前窗口。
// main.js
const { app, ipcMain, BrowserWindow } = require('electron')
let mainWindow;
function main () {
mainWindow = new BrowserWindow({
width: 500,
height: 400,
tabbingIdentifier: 'todoTab',
show: false,
webPreferences: {
nodeIntegration: true
}
})
mainWindow.loadFile('renderer/index.html');
mainWindow.once('ready-to-show', () => {
mainWindow.setTitle("Todo-" + mainWindow.id)
mainWindow.show();
})
mainWindow.mergeAllWindows();
}
app.on('ready', main);
ipcMain.on('newListWindow', main);
ipcMain.on('closeWindow', function(event){
mainWindow.close();
});在上面的文件中,我将variable.
带有两个按钮的HTML文件(缩写为body元素)
// renderer/index.html
<body>
<h1 class="text-center">Todo List</h1>
<button id="new-list-btn">New Todo List</button>
<button id="close-btn">Close List</button>
<script src="./index.js"></script>
</body>ipcRenderer。侦听按钮单击并向main.js发送消息。
// renderer/index.js
const { ipcRenderer } = require('electron')
document.getElementById('new-list-btn').addEventListener('click', () => {
ipcRenderer.send('newListWindow');
});
document.getElementById('close-btn').addEventListener('click', () => {
ipcRenderer.send('closeWindow');
});以上代码将创建多个Todo窗口,并将它们显示在不同的选项卡上。显示每个列表标题(Todo-1、Todo-2等)。问题是,最后一个打开的是唯一一个活动的。因此,如果我打开三个待办事项,然后转到其中任何一个,并点击关闭按钮,只有第三个窗口将关闭,无论我在哪一个。如果我试图关闭它们,说明该对象已被销毁,则其他两个将抛出一个错误。这很有道理。那么,我如何编码这一点,以便如果我所在的任何实例选项卡都是我关闭的实例选项卡。当我关闭它时,我所在的下一个选项卡将成为有效的mainWindow对象?
发布于 2019-11-12 14:43:25
您可能只想在'closeWindow'回调中处理焦点集中的'closeWindow'
使用BrowserWindow.getFocusedWindow静态方法
ipcMain.on('closeWindow', function(event) {
const current = BrowserWindow.getFocusedWindow()
if (current) current.close()
})发布于 2019-11-14 01:49:10
Pergy的答案可以按要求工作,但我也会发布这个答案,因为这是我实际使用的内容,而且没有其他文档可以说明如何做到这一点。差别很小,但这似乎更直接:
ipcMain.on('closeWindow', function(event) {
mainWindow = BrowserWindow.getFocusedWindow();
mainWindow.close();
})https://stackoverflow.com/questions/58786171
复制相似问题