前言
首先,我非常清楚WebApp不应摆弄窗口大小或位置。经历了许多类似的问题和论坛帖子。
但这是一种特殊情况,浏览器只是一个在受控环境中在几台特定机器上运行应用程序的平台。
任务
该应用程序应在几个显示器上管理Windows。(最多5)
我迄今为止尝试过的
- 搜索了获取有关主机系统显示信息的信息的方法,但是
window.screen
对象仅报告显示窗口的属性该窗口当前正在打开(或被认为是在一个中途,如果是一半) - 用标志
"left=123,top=123"
尝试了window.moveTo
和window.open
,但它们始终仅限于当前显示 - 用标志
"height=123,width=123"
尝试了window.resize
和window.open
,但与moveTo
一样,它们仅限于当前显示。
问题
我该怎么做才能使我的申请使用(没有手动窗口定位)在多显示环境中所有可用的空间?
方案
想像我有两个投影仪正确对齐的投影仪,并希望使之成为可能:
- 每个项目都可以投影不同的东西(每个投影仪投影自己的浏览器窗口)
- 在两个投影仪(可能是全屏)上无缝的应用程序
可能会/应该是一个窗口,运行主窗口布局逻辑
注意
我可以再次使用任何flags
,app
或kiosk
模式:我们将应用程序部署到目标环境。
浏览器选项是Windows平台上的Chrome(首选),Chromium和Firefox(由于我们将用于5个显示的特殊视频卡)。
后备解决方案
在此主window
中,手动在可用的显示器上伸展一个窗口,并在iframe
s中运行应用程序。
缺点:一个过程正在运行所有内容,因此应用程序在框架内断开所有内容。
后词
也可以解决这个问题的解决方案:Windows/Chrome/ATI/浏览器跨多个显示器
使用具有访问窗口/特定特定API的chrome/firefox扩展名。将您的整个应用程序嵌入扩展名中,或者通过消息与扩展程序进行通信(Chrome,Firefox上有相当于)。
Chrome中的支持是实验。
您可以使用window.moveto(-1000,100)将弹出窗口移至IE中的第二个显示器,如果您检查了权限,请使用"允许脚本启动的窗口,没有大小或位置约束"在Internet选项/安全/自定义级别下。
如果仅连接了一个监视器,它将将窗口移至主显示器的边缘。我还没有找到一种在Chrome中进行的方法,它似乎没有相同的安全选项。
尝试使用Chrome.Windows API与浏览器窗口进行交互。您可以使用此API在浏览器中创建,修改和重新排列窗口。
https://developer.chrome.com/extensions/windows
另一个可能的解决方案是将win32用于size&放置窗口。
如问题的解决方案所示:Chrome打包应用程序和双显示器(那里没有代码,这只是参考)
我认为这不可能。出于安全原因,浏览器确实限制了其权限的JavaScript。也许您可以手动(当然在JavaScript中)将X和Y位置设置在屏幕外面,因此它出现在另一个屏幕上,但这不是一种整洁的方法。
据我所知,您有两个选择:
- 为每个屏幕创建不同的页面,并每次分别打开它们。
- 使用按钮创建所有窗口,并使用户将其拖到相应的屏幕上。当用户单击按钮以全屏/信息亭模式打开窗口并加载内容时。但是,如果您在某个地方的FullScreenMode中激活另一个屏幕,我不知道会发生什么。它可能无效并关闭FullScreenMode。
这是您据我所知,您可以在浏览器中拥有不同窗口的唯一方法。