Есть ли способ контролировать размер и положение браузера на нескольких дисплеях / мониторах?


Предисловие

Во-первых, я очень хорошо знаю, что веб-приложения не должны играть с размером окна или положением. Прошел через много подобных так вопросов и сообщений на форуме.

Но это частный случай, когда браузер - это просто платформа для запуска приложения на нескольких конкретных машинах в контролируемой среде.

Задача

Приложение должно управлять окнами на нескольких дисплеях. (до 5)

То, что я пробовал, пока теперь

  1. искал методы получения информации об отображаемой информации хост-системы, но Объект window.screen сообщает только о свойствах дисплея, на котором в данный момент находится окно (или считается включенным, если оно находится на полпути к нему)
  2. пробовали window.moveTo и window.open с флагами "left=123,top=123", но они всегда ограничены текущим отображением
  3. пробовали window.resize и window.open с флагами "height=123,width=123", но так же, как и с moveTo, они ограничены текущим отображением.

Вопрос

Что я могу сделать, чтобы мое приложение использовало (без ручного позиционирования окон) все доступное пространство в среде с несколькими дисплеями?

Сценарий

Думайте об этом так, как будто у меня есть два проектора, правильно выровненных, и я хотел бы сделать это возможным для:

  • каждый проект проецирует разные вещи (каждый проектор проецирует свое собственное окно браузера)
  • проецируйте приложение плавно через оба проектора (возможно полноэкранный режим)

Может / должно быть окно, выполняющее логику компоновки главного окна

Примечание

Я могу использовать любое flags, app или режим kiosk, как снова: мы развертываем приложение в целевой среде.

Предпочтительными вариантами браузера являются Chrome (предпочтительно), Chromium и Firefox на платформе Windows (из-за специальной видеокарты, которую мы будем использовать для 5 дисплеев).

Запасное решение

Вручную растянуть окно по доступным дисплеям и запускайте приложения в iframes внутри этого мастера window.

Недостаток : один процесс запускает все, поэтому если приложение ломается внутри фрейма, оно ломает все.

Послесловие

Также решение этого вопроса было бы отличным подспорьем: Windows / Chrome / ATI / Browser полноэкранный режим на нескольких мониторах

5 8

5 ответов:

Используйте расширение chrome / firefox, имеющее доступ к определенным API окон / вкладок. Либо встроить все ваше приложение в расширение, либо общаться с расширением через сообщения (chrome, есть эквивалент в firefox).

Поддержка в Chrome являетсяэкспериментальной .

Вы можете использовать окно.moveTo (-1000,100) для перемещения всплывающего окна на второй монитор в IE, если вы проверяете разрешение "разрешить запускаемые скриптом окна без ограничений размера или положения" в разделе Internet Options/Security/custom level.

Если у вас подключен только один монитор, он переместит окно на край основного дисплея. Я не нашел способа сделать это в Chrome, хотя, кажется, у него нет такой же опции безопасности.

Другим возможным решением является использование win32 для определения размера и положения окна.

Как видно из решения вопроса: Chrome упаковал приложение и двойные мониторы (никакого кода там нет, это просто для справки)

Я не думаю, что это возможно. Браузер действительно ограничивает JavaScript в своих разрешениях по соображениям безопасности. Возможно, вы можете вручную (в JavaScript, конечно) установить положение x и y далеко за пределами экрана, чтобы оно отображалось на другом экране, но это не очень аккуратный способ сделать это.

Насколько я могу судить, у вас есть два варианта:

  1. Создайте разные страницы для каждого экрана и открывайте их каждый раз отдельно.
  2. Создайте все окна с помощью кнопки и заставьте пользователя перетащить их на соответствующий экран. Когда пользователь нажимает кнопку, открывается окно в полноэкранном режиме / киоске и загружается содержимое. Однако я не знаю, что произойдет, если вы активируете другой экран, в то время как ваш в fullscreenmode где-то. Это может сделать недействительным и закрыть режим полного экрана.

Это единственный способ, которым вы можете иметь отдельные окна в ваших браузерах, насколько я знаю.

Попробуйте использовать chrome.Windows API для взаимодействия с окнами браузера. Вы можете использовать этот API для создания, изменения и перестановки окон в браузере.

Https://developer.chrome.com/extensions/windows

он даже работает с Ночным дозором.