Chrome 应用程序 Window API 使用多个显示器指定和定位

Chrome App Window API Designating and Positioning with Multiple Displays

我正在为将具有双显示器设置的特定工作站创建一个 Chrome 应用程序。理想情况下,当应用程序启动时,我想创建两个不同的 windows(每台显示器一个),它们将检测自己并调整自身大小以填充每台显示器各自的分辨率。

我找不到任何关于如何进行此操作的文档或示例。虽然我可以看到有一些方法可以检测分辨率并设置在我的 Chrome 应用程序中创建的 windows 的位置和大小,但在我将监视器指定为 window( s) 应该创建于.

有没有人试过这样做?有什么办法可以通过 Chrome 应用程序 API 做到这一点吗?或者有其他解决方案吗?

这是 API 的文档: chrome.app.window

谢谢!

当您使用多个(非镜像)显示器时,OS 实质上会创建一个 "combined" 坐标 space(至少与 Chrome 应用程序坐标一样工作)。

例如,如果您有 2 台并排的 1920x1080 显示器,那么一台的坐标在 (0,0)-(1989,1079) 范围内,另一台的坐标在 (1920,0)-(3839,1079) 范围内。请注意,您不能假设它们是并排的,它们可以 "glued" 以任何边缘接触的方式在一起,包括可能的偏移。

如果将 outerBounds.top/outerBounds.left 属性传递给 chrome.app.window.create,这些实际上指的是组合坐标 space,而不是当前监视器。 Chrome 可能 clamp/shift 您传递给它的内容会适合屏幕。

现在,如何检测显示器配置?有一个 API,chrome.system.display(注意需要 "system.display" 许可)。它将列出监视器,以及它们左上角的 "combined" 坐标及其大小(顺便说一句,包括有关 "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 fullscreen/maximized,最好在创建它们之后再执行此操作,以确保它们首先位于正确的监视器上。


顺便说一句,考虑 Chrome 应用程序 are being deprecated