API «Окно с картинкой в картинке» документа
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает во всех распространённых браузерах.
Экспериментально: Это экспериментальная технология.
Перед использованием в продуктовой среде внимательно ознакомьтесь со таблицей совместимости браузеров.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
API «Картинка в картинке» документа позволяет открыть окно, всегда находящееся поверх других окон, которое можно заполнить произвольным HTML-контентом — например, видео с пользовательскими элементами управления или набором потоков, отображающих участников видеоконференции. Он расширяет предыдущий API «Картинка в картинке» для <video>, который специально позволяет элементу HTML <video> быть помещённым в окно, всегда находящееся поверх других.
Основные понятия и использование
Часто бывает полезно иметь для веб-приложения дополнительное окно помимо основного окна, в котором оно выполняется. Возможно, вы захотите просматривать другие окна, сохраняя при этом конкретный контент приложения в поле зрения, или вы захотите предоставить этому контенту собственное пространство, сохраняя основное окно приложения свободным для отображения другого контента. Вы можете справиться с этим, просто открыв обычное новое окно браузера, но это связано с двумя основными проблемами:
- Вам нужно обрабатывать совместное использование информации о состоянии между двумя окнами.
- Дополнительное окно приложения не всегда остается поверх других окон и, следовательно, может быть скрыто другими окнами.
Для решения этих проблем веб-браузеры представили API, позволяющие приложениям создавать окно, всегда находящееся поверх других, которое является частью одной сессии. Первый признанный случай использования — сохранение воспроизведения видео в отдельном окне, чтобы пользователь мог продолжать его просмотр, одновременно рассматривая другой контент. Это обрабатывается с помощью API «Картинка в картинке» для <video>, который напрямую используется на элементе <video> для размещения его в отдельном окне.
Однако этот API оказался несколько ограниченным — вы можете поместить только один <video> элемент в окно, всегда находящееся поверх других, с минимальными управляющими элементами, создаваемыми браузером. Для большей гибкости был представлен API «Картинка в картинке» документа. Это позволяет помещать любой контент в окно, всегда находящееся поверх других, для широкого спектра случаев использования, включая:
- Игровой видеоплеер, всегда находящийся поверх других, показывающий один или несколько видео с пользовательскими элементами управления и стилями.
- Система видеоконференций, которая позволяет пользователю всегда видеть потоки других участников, а также элементы управления для презентации контента, отключения звука, завершения звонков и т. д.
- Всегда видимые инструменты повышения производительности, такие как таймеры, заметки, списки задач, инструменты мгновенного обмена сообщениями и т. д.
- Отдельное окно для сохранения дополнительного контента, при этом основное окно приложения остается свободным от элементов управления. Например, у вас может быть игра в жанре ролевой игры, в которой вы хотите отобразить элементы управления игрой, инструкции или сведения о мире в дополнительном окне, сохранив основное окно свободным для отображения игровых локаций и карты.
Как это работает?
Новый объект DocumentPictureInPicture, представляющий окно «Картинка в картинке», всегда находящееся поверх других, для текущего контекста документа, доступен через Window.documentPictureInPicture. Окно «Картинка в картинке» открывается путем вызова метода DocumentPictureInPicture.requestWindow(), который возвращает Promise, который выполняется с собственным объектом окна Window.
Окно «Картинка в картинке» похоже на пустое окно с одним источником, открытое через Window.open(), но с некоторыми отличиями:
- Окно «Картинка в картинке» накладывается поверх других окон.
- Окно «Картинка в картинке» никогда не переживает окно открытия.
- В окно «Картинка в картинке» нельзя перейти.
- Позиция окна «Картинка в картинке» не может быть установлена веб-сайтом.
- В один момент времени на вкладке браузера может быть только одно окно «Картинка в картинке», при этом пользовательский агент может дополнительно ограничить общее количество открытых окон «Картинка в картинке».
Помимо этого, вы можете манипулировать экземпляром окна «Картинка в картинке» Window как вам угодно, например, добавляя в него отображаемый контент в DOM и копируя стили в него, чтобы добавленный контент отображался так же, как и в основном окне. Вы также можете закрыть окно «Картинка в картинке» (нажав предоставленный браузером элемент управления или выполнив Window.close() на нем), а затем отреагировать на его закрытие, используя стандартное событие pagehide. При закрытии вы захотите вернуть отображаемый контент в основное окно приложения.
Подробное руководство по использованию см. в разделе Использование API «Картинка в картинке» документа.
Интерфейсы
DocumentPictureInPicture-
Точка входа для создания и обработки окон документа «Картинка в картинке».
DocumentPictureInPictureEvent-
Объект события для события
enter, которое срабатывает при открытии окна «Картинка в картинке».
Расширения для других интерфейсов
Window.documentPictureInPicture-
Возвращает ссылку на объект
DocumentPictureInPictureдля текущего контекста документа.
Дополнения к CSS
-
display-mode, значениеpicture-in-picture -
Значение @media media feature, которое позволяет разработчикам применять CSS к документу в зависимости от того, отображается ли он в режиме «Картинка в картинке».
Примеры
См. Пример API «Картинка в картинке» документа для полной демонстрации (см. также полный исходный код).
Спецификации
Совместимость браузеров
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | |
Document_Picture-in-Picture_API |
116 | 116 | Нет | 102 | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Document_Picture-in-Picture_API