Electron 当第二个窗口被隐藏时,防止自动显示和聚焦第一个窗口

Electron 当第二个窗口被隐藏时,防止自动显示和聚焦第一个窗口,electron,Electron,假设有三个活动窗口。其中两个属于我的应用程序firstWin和secondWin。第三种是Chrome或任何其他应用程序。FixWin位于层次结构的底部,中间是Chrome,第二个是顶部。 第二赢 铬 第一名 当我调用secondWin.hide时,firstWin会自动弹出并聚焦。结果是: 第一名 铬 有什么办法可以防止吗?当我隐藏secondWin时,我希望firstWin不会弹出,而是停留在窗口层次结构的底部。我相信您应该能够收听窗口的焦点和/或显示事件,请参见 然后,您可以决定立即在该窗

假设有三个活动窗口。其中两个属于我的应用程序firstWin和secondWin。第三种是Chrome或任何其他应用程序。FixWin位于层次结构的底部,中间是Chrome,第二个是顶部。

第二赢 铬 第一名

当我调用secondWin.hide时,firstWin会自动弹出并聚焦。结果是:

第一名 铬


有什么办法可以防止吗?当我隐藏secondWin时,我希望firstWin不会弹出,而是停留在窗口层次结构的底部。

我相信您应该能够收听窗口的焦点和/或显示事件,请参见

然后,您可以决定立即在该窗口上调用hide。我想它有可能在屏幕上短暂闪烁

如何做出这个决定有点棘手;我想你可以记录下你调用secondWin.hide的时间,然后用此后的秒数来决定。。。不理想

另一种方法是,在调用secondWin.hide之前,您可以调用firstWin的函数,如果该函数被最小化或隐藏,您可以调用app.hide


除非您总是希望在一个窗口被隐藏时隐藏所有窗口,否则很遗憾,这不能很好地扩展到两个窗口之外。

我相信您应该能够听到窗口的焦点和/或显示事件,请参见

然后,您可以决定立即在该窗口上调用hide。我想它有可能在屏幕上短暂闪烁

如何做出这个决定有点棘手;我想你可以记录下你调用secondWin.hide的时间,然后用此后的秒数来决定。。。不理想

另一种方法是,在调用secondWin.hide之前,您可以调用firstWin的函数,如果该函数被最小化或隐藏,您可以调用app.hide


除非您总是希望在一个窗口被隐藏时隐藏所有窗口,否则这将无法很好地扩展到两个窗口之外,不幸的是。

我现在使用的解决方案是将窗口的不透明度设置为零并停用鼠标事件。那就是

let firstWin = new BrowserWindow()
let secondWin = new BrowserWindow()

secondWin.hide()
而不是

secondWin.setOpacity(0); 
secondWin.setIgnoreMouseEvents(true);

然后,只要希望窗口再次可见,就可以反转设置。这有点老套,但现在可以用了。让我们看看是否有人找到更好的解决方案。理想情况下,将要显示一个类似事件的窗口,您可以将其插入并调用event.preventdefaulton。

我现在使用的解决方案是将窗口的不透明度设置为零并停用鼠标事件。那就是

let firstWin = new BrowserWindow()
let secondWin = new BrowserWindow()

secondWin.hide()
而不是

secondWin.setOpacity(0); 
secondWin.setIgnoreMouseEvents(true);

然后,只要希望窗口再次可见,就可以反转设置。这有点老套,但现在可以用了。让我们看看是否有人找到更好的解决方案。理想情况下,将要显示一个类似事件的窗口,您可以将其插入并调用event.prevent default on。

窗口管理取决于操作系统,您是否介意共享您使用的操作系统?我使用的是macOS。理想情况下,我会寻找一个同样适用于Windows的解决方案:窗口管理依赖于操作系统,您介意分享您使用的操作系统吗?我使用的是macOS。理想情况下,我会寻找一个同样适用于Windows的解决方案:谢谢你的想法,Darren。我也考虑过这两个选项,但最终还是拒绝了它们,原因与您提到的相同:1:窗口正在闪烁,2:所有窗口都关闭。我会写下我所用的解决方案,然后看看是否有人能想出更优雅的方案。谢谢你的想法,达伦。我也考虑过这两个选项,但最终还是拒绝了它们,原因与您提到的相同:1:窗口正在闪烁,2:所有窗口都关闭。我会写下我的解决方案,然后看看是否有其他人提出了更优雅的解决方案。