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

时间:2015-01-16 21:44:47

标签: javascript google-chrome google-chrome-app

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

从内容

开始

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

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

期望的行为

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

不是我想要的东西

我不想要的是仪表窗口总是在所有东西之上。这就是我使用Chrome alwaysOnTop所获得的。

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

Here的另一个问题几乎与我的问题相同但在不同的框架(Adobe AIR)中实际上并没有那么相似。但它确实给了我一个想法,使得仪表窗口最顶部,当且仅当没有其他窗口覆盖任一窗口时。这可能不会像我想要的那样完全,但它会很接近(r)。

不幸的是,这需要我尝试了解系统中所有其他窗口的相当干扰,而且我还没有意识到这样做的方法。

1 个答案:

答案 0 :(得分:0)

您可以通过聆听主窗口的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;
});