首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在电子应用程序中访问多个mainWindow实例?

如何在电子应用程序中访问多个mainWindow实例?
EN

Stack Overflow用户
提问于 2019-11-10 06:06:28
回答 2查看 1.3K关注 0票数 1

如何使用多个mainWindow实例创建一个功能良好的电子应用程序?这里有一个非常简单的应用程序,它有一个mainWindow,只有两个按钮。一个用于创建新的mainWindow实例,另一个用于关闭当前窗口。

代码语言:javascript
复制
// 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.

  • Adding设置为全局,一个tabbingIdentifier属性,并链接mergeAllWindows()方法,如果打开多个窗口,mergeAllWindows()方法将自动创建多个选项卡。
  • 每个mainWindow实例都由电子分配一个id。如果只打开一个实例,则id为1。为了简单起见,我将mainWindow标题设置为"Todo-“+ mainWindow.id (第一个窗口为Todo-1,打开第二个窗口为Todo-2 )。当单击newListWindow按钮时,
  • 将调用"main”函数,创建一个新的closeWindow实例,按下closeWindow按钮,关闭mainWindow实例。

带有两个按钮的HTML文件(缩写为body元素)

代码语言:javascript
复制
// 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发送消息。

代码语言:javascript
复制
// 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对象?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-12 14:43:25

您可能只想在'closeWindow'回调中处理焦点集中的'closeWindow'

使用BrowserWindow.getFocusedWindow静态方法

代码语言:javascript
复制
ipcMain.on('closeWindow', function(event) {
  const current = BrowserWindow.getFocusedWindow()
  if (current) current.close()
})
票数 2
EN

Stack Overflow用户

发布于 2019-11-14 01:49:10

Pergy的答案可以按要求工作,但我也会发布这个答案,因为这是我实际使用的内容,而且没有其他文档可以说明如何做到这一点。差别很小,但这似乎更直接:

代码语言:javascript
复制
ipcMain.on('closeWindow', function(event) {
  mainWindow = BrowserWindow.getFocusedWindow();
  mainWindow.close();
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58786171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档