Есть ли способ контролировать размер и положение браузера на нескольких дисплеях / мониторах?
Предисловие
Во-первых, я очень хорошо знаю, что веб-приложения не должны играть с размером окна или положением. Прошел через много подобных так вопросов и сообщений на форуме.
Но это частный случай, когда браузер - это просто платформа для запуска приложения на нескольких конкретных машинах в контролируемой среде.Задача
Приложение должно управлять окнами на нескольких дисплеях. (до 5)
То, что я пробовал, пока теперь
- искал методы получения информации об отображаемой информации хост-системы, но Объект
window.screen
сообщает только о свойствах дисплея, на котором в данный момент находится окно (или считается включенным, если оно находится на полпути к нему) - пробовали
window.moveTo
иwindow.open
с флагами"left=123,top=123"
, но они всегда ограничены текущим отображением - пробовали
window.resize
иwindow.open
с флагами"height=123,width=123"
, но так же, как и сmoveTo
, они ограничены текущим отображением.
Вопрос
Что я могу сделать, чтобы мое приложение использовало (без ручного позиционирования окон) все доступное пространство в среде с несколькими дисплеями?
Сценарий
Думайте об этом так, как будто у меня есть два проектора, правильно выровненных, и я хотел бы сделать это возможным для:
- каждый проект проецирует разные вещи (каждый проектор проецирует свое собственное окно браузера)
- проецируйте приложение плавно через оба проектора (возможно полноэкранный режим)
Может / должно быть окно, выполняющее логику компоновки главного окна
Примечание
Я могу использовать любое flags
, app
или режим kiosk
, как снова: мы развертываем приложение в целевой среде.
Предпочтительными вариантами браузера являются Chrome (предпочтительно), Chromium и Firefox на платформе Windows (из-за специальной видеокарты, которую мы будем использовать для 5 дисплеев).
Запасное решение
Вручную растянуть окно по доступным дисплеям и запускайте приложения в iframe
s внутри этого мастера window
.
Недостаток : один процесс запускает все, поэтому если приложение ломается внутри фрейма, оно ломает все.
Послесловие
Также решение этого вопроса было бы отличным подспорьем: Windows / Chrome / ATI / Browser полноэкранный режим на нескольких мониторах
5 ответов:
Используйте расширение chrome / firefox, имеющее доступ к определенным API окон / вкладок. Либо встроить все ваше приложение в расширение, либо общаться с расширением через сообщения (chrome, есть эквивалент в firefox).
Поддержка в Chrome являетсяэкспериментальной .
Вы можете использовать окно.moveTo (-1000,100) для перемещения всплывающего окна на второй монитор в IE, если вы проверяете разрешение "разрешить запускаемые скриптом окна без ограничений размера или положения" в разделе Internet Options/Security/custom level.
Если у вас подключен только один монитор, он переместит окно на край основного дисплея. Я не нашел способа сделать это в Chrome, хотя, кажется, у него нет такой же опции безопасности.
Другим возможным решением является использование win32 для определения размера и положения окна.
Как видно из решения вопроса: Chrome упаковал приложение и двойные мониторы (никакого кода там нет, это просто для справки)
Я не думаю, что это возможно. Браузер действительно ограничивает JavaScript в своих разрешениях по соображениям безопасности. Возможно, вы можете вручную (в JavaScript, конечно) установить положение x и y далеко за пределами экрана, чтобы оно отображалось на другом экране, но это не очень аккуратный способ сделать это.
Насколько я могу судить, у вас есть два варианта:
- Создайте разные страницы для каждого экрана и открывайте их каждый раз отдельно.
- Создайте все окна с помощью кнопки и заставьте пользователя перетащить их на соответствующий экран. Когда пользователь нажимает кнопку, открывается окно в полноэкранном режиме / киоске и загружается содержимое. Однако я не знаю, что произойдет, если вы активируете другой экран, в то время как ваш в fullscreenmode где-то. Это может сделать недействительным и закрыть режим полного экрана.
Это единственный способ, которым вы можете иметь отдельные окна в ваших браузерах, насколько я знаю.
Попробуйте использовать chrome.Windows API для взаимодействия с окнами браузера. Вы можете использовать этот API для создания, изменения и перестановки окон в браузере.
Https://developer.chrome.com/extensions/windows
он даже работает с Ночным дозором.