我正在为具有双显示器设置的特定工作站创建Chrome应用程序。理想情况下,当应用程序启动时,我想创建两个不同的窗口(每个监视器上一个),它将检测并调整自身大小以填充每个监视器的相应分辨率。
我找不到任何关于如何解决这个问题的文档或示例。虽然我可以看到有方法可以检测分辨率并设置我的Chrome应用程序中创建的窗口的位置和大小,但对于我指定监视器应该创建窗口的地方,我没有什么明显的。
还有其他人试图这样做吗?有没有办法通过Chrome App API执行此操作?还是有另一种解决方案吗?
以下是API的文档: chrome.app.window
谢谢!
答案 0 :(得分:1)
当您使用多个(非镜像)监视器时,操作系统实际上会创建一个“组合”坐标空间(至少就Chrome应用程序坐标的工作而言)。
例如,如果您有两个并排的1920x1080监视器,则其中一个坐标范围为(0,0)-(1989,1079)
,另一个范围为(1920,0)-(3839,1079)
。请注意,您不能假设它们是并排的,它们可以以任何接触方式“粘合”在一起,包括可能的偏移。
如果您将outerBounds.top
/ outerBounds.left
属性传递给chrome.app.window.create
,那么这些属性实际上是指组合坐标空间,而不是当前监视器。 Chrome可能会阻止/移动您传递给它的内容以适应屏幕。
现在,如何检测显示器配置?有一个API,chrome.system.display
(请注意所需的"system.display"
权限)。它将列出监视器,左上角的“组合”坐标及其大小(顺便说一下,包括“workArea”区域的信息:即监视器大小减去系统工具栏)。
这是执行您所描述内容的代码:
chrome.system.display.getInfo((screens) => {
screens.forEach((screen) => {
chrome.app.window.create("app.html", {
outerBounds: screen.workArea // It so happens it's formatted as expected
});
});
});
如果您希望Windows全屏/最大化,最好在创建它们之后这样做,以确保它们首先位于正确的显示器上。
另外,请考虑使用Chrome应用are being deprecated。