let firstWin = new BrowserWindow()
let secondWin = new BrowserWindow()
secondWin.hide()
假设有三个活动窗口,其中两个属于我的应用程序(firstWin
和secondWin
),第三个是Chrome(或任何其他应用程序),firstWin
在层次结构的底部,Chrome在中间,secondWin
在顶部。
秒赢
chrome
第一次成功
当我调用secondWin.hide()
时,firstWin
会自动弹出并获得焦点,结果如下:
第一次成功
chrome
有什么方法可以防止这种情况吗?我希望在隐藏secondWin
时firstWin
不弹出,而是停留在窗口层次结构的底部。
3条答案
按热度按时间brgchamk1#
我相信您应该能够监听窗口的
focus
和/或show
事件(参见https://www.electronjs.org/docs/api/browser-window)然后,您可以做出“决定”,立即在该窗口上调用hide()(我认为它有可能在屏幕上短暂 Flink )。
(How做这个决定有点棘手我想你可以记录下你调用
secondWin.hide()
的时间,然后用从那以后的秒数来决定...不理想!)作为另一种方法,在调用
secondWin.hide()
之前,您可以查看firstWin
的当前状态,如果该状态被最小化或隐藏,则可以调用app.hide()
(参见https://www.electronjs.org/docs/api/app#apphide-macos)。(除非你总是想在一个窗口隐藏时隐藏所有窗口,否则很遗憾,这不会很好地扩展到超过2个窗口。)
4c8rllxm2#
我现在使用的解决方案是将窗口的不透明度设置为零并禁用鼠标事件。
代替
然后,每当你想让窗口再次可见时,你可以反转设置。这有点笨拙,但现在可以了。让我们看看是否有人能找到更好的解决方案。理想情况下,会有一个像
window-about-to-be-shown
这样的事件,你可以插入它并调用event.preventDefault()
。l0oc07j23#
这是一段时间以来,最后一个答案,但这里是我如何解决这个问题:
设定
就在呼叫之前
将阻止第一个窗口获得焦点。
之后,可以再次调用