Управление окнами¶
PWA вне браузера управляет собственным окном. В этой главе мы рассмотрим API-интерфейсы и возможности управления окном в операционной системе.
Окно PWA¶
Запуск в собственном окне, управляемом PWA, обладает всеми преимуществами и обязанностями любого окна в этой операционной системе, например:
- Возможность изменять размеры и перемещать окно в многооконных операционных системах, таких как Windows или ChromeOS.
- Разделение экрана с окнами других приложений, как в режиме разделения экрана в iPadOS или в режиме разделения экрана в Android.
- Появление в доках, панелях задач и в меню Alt+Tab на настольных компьютерах, а также в списках многозадачных окон на мобильных устройствах.
- Возможность сворачивать, перемещать окно по экранам и рабочим столам, а также закрывать его в любой момент.
Перемещение и изменение размеров окна¶
Окно PWA может иметь любой размер и располагаться в любом месте экрана в настольных операционных системах. По умолчанию, когда пользователь открывает PWA впервые после установки, окно PWA получает размер в процентах от текущего экрана, с максимальным разрешением 1920x1080, расположенное в левом верхнем углу экрана.
Пользователь может перемещать и изменять размер окна, при этом браузер запоминает последнее предпочтение, поэтому при следующем открытии приложения окно сохранит размер и положение, заданные при предыдущем использовании.
В манифесте нет возможности определить предпочтительный размер и положение окна PWA. Вы можете изменять положение и размер окна только с помощью JavaScript API. В своем коде вы можете перемещать и изменять размеры собственного окна PWA с помощью функций moveTo(x, y)
и resizeTo(x, y)
объекта window
.
Например, можно изменять размеры и перемещать окно PWA при его загрузке, используя:
1 2 3 4 5 6 7 8 9 10 |
|
Текущий размер и положение экрана можно запросить с помощью объекта window.screen
; определить изменение размера окна можно с помощью события resize
объекта window
. Событие, фиксирующее перемещение окна, не предусмотрено, поэтому можно часто запрашивать позицию.
Вместо абсолютного перемещения и изменения размеров окна можно перемещать относительно и изменять размеры с помощью moveBy()
и resizeBy()
.
!!!note ""На мобильных устройствах перемещение или изменение размеров окна не приведет к каким-либо изменениям на экране.
Переход на другие сайты¶
Если вы хотите отправить пользователя на внешний сайт, не входящий в область действия вашего PWA, это можно сделать с помощью стандартного HTML-элемента <a href>
, используя location.href
или открывая новое окно на совместимых платформах.
В настоящее время во всех браузерах, если PWA установлен, при переходе на URL, выходящий за рамки области действия вашего манифеста, браузерный движок вашего PWA отобразит in-app браузер в контексте вашего окна.
Некоторые особенности in-app браузеров таковы:
- Они отображаются поверх вашего содержимого.
- Они имеют статическую строку URL, показывающую текущее происхождение, заголовок окна и меню. Обычно они оформлены в соответствии с
theme_color
вашего манифеста. - Из контекстного меню можно открыть этот URL в браузере.
- Пользователь может закрыть браузер или вернуться назад.
В то время как браузер приложения находится на экране, ваш PWA ожидает в фоновом режиме, как будто его заслоняет другое окно.
На iOS и iPadOS встроенный браузер использует SafariViewController, движок рендеринга Safari, изолированный от хранилища PWA. Поэтому, если у пользователя есть сессия в Safari, она не будет отображаться в вашем PWA, но она будет отображаться в браузере in-app в вашем PWA.
Потоки авторизации¶
Многие потоки веб-аутентификации и авторизации предполагают перенаправление пользователя на другой URL-адрес в другом месте происхождения для получения маркера, который возвращается в место происхождения вашего PWA, например, при использовании OAuth 2.0.
В этих случаях внутриприкладной браузер выполняет следующие действия:
- Пользователь открывает ваш PWA и нажимает кнопку входа.
- Ваш PWA перенаправляет пользователя на URL-адрес, выходящий за рамки PWA, чтобы механизм рендеринга открыл in-app браузер внутри вашего PWA.
- Пользователь может в любой момент выйти из встроенного браузера и вернуться в PWA.
- Пользователь входит в систему с помощью встроенного браузера. Сервер аутентификации перенаправляет пользователя на ваш PWA-сайт, передавая в качестве аргумента токен.
- In-app браузер закрывается при обнаружении URL-адреса, входящего в область действия PWA.
- Движок перенаправляет навигацию главного окна PWA на URL, на который перешел сервер аутентификации, находясь в in-app браузере.
- Ваш PWA получает токен, сохраняет его и отображает PWA.
Принудительное открытие навигации браузера¶
Если вы хотите принудительно открыть браузер с URL, а не in-app браузер, вы можете использовать цель _blank
для элементов <a href>
. Это работает только для настольных PWA; на мобильных устройствах возможность принудительного открытия браузера по URL отсутствует.
1 2 3 |
|
Открытие новых окон¶
На настольных компьютерах пользователи могут открывать несколько окон одного и того же PWA. Каждое окно будет представлять собой отдельную навигацию к одному и тому же start_url
, как если бы вы открыли две вкладки браузера с одним и тем же URL. В меню PWA пользователь может выбрать пункт File, затем New window, а в коде PWA можно открыть новое окно с помощью функции open()
. Подробности см. в документации.
1 2 3 |
|
Вызов open()
внутри окна PWA на iOS или iPadOS возвращает null
и не открывает окно. Открытие новых окон на Android создает новый встроенный браузер для URL-адреса, даже если URL-адрес находится в пределах области действия PWA, что обычно не приводит к открытию внешнего браузера.
Вторым аргументом функции open()
является имя окна. Если окно с указанным именем уже открыто, движок заменит открытое окно с таким именем на новое навигационное. Если требуется всегда открывать новое окно, то необходимо использовать различные строковые значения для имени.
Функции open()
, moveTo()
и resizeTo()
не нуждаются в префиксе window.
при написании JavaScript, поскольку window
— это глобальный объект. Можно просто вызвать moveTo(0, 0)
. Однако вызов window.moveTo(0, 0)
делает код более понятным.
Заголовок окна¶
Элемент <title>
был использован в первую очередь для SEO-целей, поскольку пространство внутри вкладки браузера ограничено. При переходе из браузера в окно в PWA все пространство строки заголовка становится доступным.
Вы можете определить содержимое строки заголовка:
- Статически в элементе HTML
<title>
. - Динамически, изменяя строковое свойство
document.title
в любой момент времени.
В настольных PWA заголовок очень важен, он используется в строке заголовка окна и иногда в диспетчере задач или многозадачном выборе. Если у вас одностраничное приложение, то вы можете захотеть обновлять заголовок на каждом маршруте.
Для уменьшения фишинга в PWA некоторые браузеры для настольных компьютеров могут предусматривать дополнительные меры в отношении заголовка окна. Например, если вы не используете название своего приложения в заголовке, браузер может добавить префикс с названием вашего PWA. Другие браузеры при изменении заголовка могут на несколько секунд отобразить в строке заголовка текущий источник, чтобы подчеркнуть, куда перешел пользователь.
Tabbed mode¶
Экспериментальная возможность, известная как tabbed mode, позволит вашему PWA иметь дизайн на основе вкладок, подобный веб-браузеру. В этом случае пользователь может иметь несколько вкладок, открытых в одном и том же PWA, но связанных между собой в одном окне операционной системы, как показано на следующем видео:
Подробнее об этой экспериментальной возможности можно прочитать на сайте Tabbed application mode for PWA.
В главе Experimental chapter показано, как можно начать использовать экспериментальные возможности.
Наложение элементов управления окном¶
Мы уже упоминали, что заголовок окна можно изменить, определив значение элемента <title>
или свойства document.title
. Но это всегда строковое значение. А что, если бы мы могли оформлять строку заголовка по своему усмотрению, с помощью HTML, CSS и изображений? Вот тут-то и приходит на помощь Window Controls Overlay — новая экспериментальная возможность в Microsoft Edge и Google Chrome для настольных PWA.
Возможности режима вкладок и наложения элементов управления окнами определяют новые значения для члена манифеста display
. Для обеспечения совместимости со всеми устройствами группа разработчиков манифеста создала способ замены цепочки fallback display
, чтобы вы могли указать, какое значение display
использовать, если первый вариант недоступен. Подробнее об этом читайте в Preparing for the display modes of tomorrow.
Подробнее об этой возможности можно прочитать в статье Настройка наложения элементов управления окном на строку заголовка вашего PWA.
Размещение окон на нескольких экранах¶
При наличии нескольких экранов пользователи хотят использовать все доступное им пространство. Пользователи могут:
- Открыть презентацию на внешнем мониторе.
- Восстанавливать положение открытого окна на экране.
- Отдавать предпочтение экранам, поддерживающим сенсорное управление.
API Multi-Screen Window Placement API позволяет PWA делать все это и даже больше.
Получение информации об экране¶
Multi-Screen Window Placement API добавляет новый метод window.getScreenDetails()
, который возвращает объект с экранами в виде неизменяемого массива присоединенных экранов. Также имеется живой объект, доступный из ScreenDetails.currentScreen
, соответствующий текущему window.screen
.
В некоторых браузерах вызов window.getScreenDetails()
требует от пользователя разрешения на использование PWA.
Возвращаемый объект также вызывает событие screenschange
при изменении массива screens
. (Этого не происходит при изменении атрибутов отдельных экранов). Отдельные экраны, либо window.screen
, либо экран в массиве screens
, также вызывают событие change
при изменении своих атрибутов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Если пользователь или операционная система перемещает окно PWA с одного экрана на другой, то от объекта screen details также будет получено событие currentscreenchange
.
Для отображения веб-содержимого на больших презентационных устройствах, таких как проекторы и телевизоры, подключенные к сети, можно также воспользоваться Presentation API.
Блокировка выключения экрана¶
Представьте себе, что вы находитесь на кухне, следуя рецепту на своем планшете. Вы только что закончили подготовку ингредиентов. Руки в беспорядке, и вы возвращаетесь к планшету, чтобы прочитать следующий шаг. Катастрофа! Экран стал черным! API Screen Wake Lock API создан для вас и позволяет PWA предотвратить затемнение, спящий режим или блокировку экрана, позволяя пользователям останавливаться, запускаться, уходить и возвращаться без опасений.
1 2 3 4 5 6 7 8 9 10 11 |
|
Виртуальная клавиатура¶
Сенсорные устройства, такие как телефоны и планшеты, предлагают виртуальную экранную клавиатуру, позволяющую пользователю набирать текст, когда элементы формы вашего PWA находятся в фокусе.
Благодаря VirtualKeyboard API ваш PWA теперь может получить больше возможностей для управления клавиатурой на совместимых платформах с помощью интерфейса navigator.virtualKeyboard
, включая:
- Показ и скрытие виртуальной клавиатуры с помощью функций
navigator.virtualKeyboard.show()
иnavigator.virtualKeyboard.hide()
. - Сообщение браузеру о том, что вы сами заботитесь о закрытии виртуальной клавиатуры, путем установки значения
navigator.virtualKeyboard.overlaysContent
равнымtrue
. - Узнавать о появлении и исчезновении клавиатуры по событию
geometrychange
изnavigator.virtualKeyboard
. - Задание политики виртуальной клавиатуры при редактировании элементов хоста (с помощью
contenteditable
) с помощью HTML-атрибутаvirtualkeyboardpolicy
. Политика позволяет определить, будет ли виртуальная клавиатура обрабатываться браузером автоматически, используя значениеauto
, или с помощью вашего скрипта, используя значениеmanual
. - Использование переменных окружения CSS для получения информации о внешнем виде виртуальной клавиатуры, таких как
keyboard-inset-height
иkeyboard-inset-top
.
Подробнее об этом API можно прочитать в разделе Полный контроль с помощью VirtualKeyboard API.
Ресурсы¶
- Управление несколькими дисплеями с помощью Multi-Screen Window Placement API
- Режим работы приложений с вкладками для PWA
- Не спать с помощью API блокировки экрана
- Полный контроль с помощью API VirtualKeyboard
- Настройка наложения элементов управления окном на строку заголовка PWA
- Отображение содержимого в строке заголовка
Источник — Window management