如何在同一应用的其他窗口上方创建 Chrome 应用窗口

How do I make a Chrome App window above other windows of the same app?

本文关键字:应用 窗口 方创建 Chrome 创建 其他      更新时间:2023-09-26

我正在开发一个Chrome应用程序,它与一些硬件通信并向用户显示一些信息。我希望它有两个窗口,并对它们的 z 顺序进行一些控制。

从内容开始

主窗口

(我称之为"主"窗口)始终处于打开状态,尽管它可以最小化。它相当大(笔记本电脑的左半部分到中型台式机屏幕),并显示一些相当技术性的信息(这在这里并不重要)。

用户可以按下一个按钮并打开另一个窗口("仪表"窗口),该窗口很小(大约 100px x 100px),并将信息归结为"做事"按钮,以及范围从 0 到 100 的仪表。

所需的行为

我想要的是仪表窗口始终位于主窗口的顶部。这是我想要从仪表窗口中获得的关于 z 顺序的唯一特殊行为。

不是我想要的东西

我不希望仪表窗口始终位于所有内容之上。这就是我从Chrome的alwaysOnTop中得到的。

一种可能性导致了另一个问题。

这是另一个问题,它几乎与我的问题相同,但在不同的框架(Adobe AIR)中,实际上根本不相似。但它确实给了我一个想法,当且仅当没有其他窗口覆盖任一窗口时,才使仪表窗口最顶部。这可能不完全按照我想要的方式工作,但它会很接近(r)。

不幸的是,这将要求我尝试了解系统中所有其他相当侵入性的窗口,而且我不知道有什么方法可以做到这一点。

您可以通过收听主窗口的onBoundsChanged,然后打开仪表窗口alwaysOnTop然后再次关闭来伪造这一点。

firstWindow.onBoundsChanged.addListener(function() {
    secondWindow.setAlwaysOnTop(true);
    secondWindow.setAlwaysOnTop(false);
});

这不是一个完美的解决方案,可能不适用于所有环境。另一种方法是执行类似于 windows 示例的操作,该示例强制第二个窗口停留在第一个窗口的右侧。

firstWindow.onBoundsChanged.addListener(function() {
    var bounds = firstWindow.outerBounds;
    secondWindow.outerBounds.left = bounds.left + bounds.width + 5;
});