Назад к блогу
Платформа

Document Picture-in-Picture: границы разрешений и окон

Как Document Picture-in-Picture создаёт окно документа, почему нужна активация пользователя и как сохранить доступный запасной вариант.

BotBrowser Team

Документация

Нужна структурированная документация по теме Платформа?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

BotBrowser может проверять поддерживаемые элементы Document Picture-in-Picture и восстановление после закрытия в контролируемых профилях. Он не добавляет поддержку браузера, не обходит кратковременную активацию пользователя, не управляет положением окна и не гарантирует одинаковое поведение разных движков.

TL;DR

Document Picture-in-Picture открывает окно документа того же источника после действия пользователя. Проверяйте поддержку и активацию во время действия, обрабатывайте закрытие и сохраняйте ту же задачу внутри страницы, если запрос отклонён или функция недоступна.

Содержание

Что меняет API

Document Picture-in-Picture отличается от Video Picture-in-Picture. Приложение запрашивает управляемое браузером окно и помещает туда документ, а не отделяет видеопоток. Предложение описывает documentPictureInPicture.requestWindow() и событие enter; MDN отмечает ограниченную доступность. Если браузер разрешает, документ сохраняет источник вызывающей страницы, но это не даёт междоменный доступ и не обход разрешений.

Действие пользователя запрашивает окно Document Picture-in-Picture, а закрытие возвращает задачу в запасной вариант страницы без междоменного потока данных

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

Проверки поддержки и активации

Проверка должна быть узкой и выполняться вместе с реальным нажатием или клавиатурной активацией. Не запрашивайте окно при загрузке, из таймера или после несвязанного сетевого события. Promise может быть отклонён при отсутствии поддержки, активации, политики или подходящего окна.

async function openPanel(panel) {
  if (!('documentPictureInPicture' in window)) return showInline(panel);
  try {
    const pip = await documentPictureInPicture.requestWindow({ width: 360, height: 240 });
    pip.document.body.append(panel);
    pip.addEventListener('pagehide', () => showInline(panel), { once: true });
  } catch {
    showInline(panel);
  }
}

Это ветвление возможностей, а не сигнал личности браузера. Не отправляйте полный объект возможности в аналитику; при необходимости сохраняйте только opened, unsupported или rejected, указав цель и срок хранения.

Жизненный цикл и приватность

У вспомогательного документа свой жизненный цикл. Пользователь, навигация или браузер могут закрыть его. При исчезновении окна верните задачу на страницу и не считайте открытое состояние долговременным хранилищем. Храните только минимальное состояние источника, необходимое задаче; отдельное представление не является приватным контейнером.

Доступ одного источника координирует интерфейс самого приложения, а не чужие сайты. API не раскрывает получателя, список окон или стабильный атрибут устройства. Тест должен записывать размер запроса, результат создания и восстановление после закрытия, а не историю или идентификаторы окон.

Доступный запасной вариант

Версия внутри страницы должна быть доступна с клавиатуры и объявлять изменения состояния. Кнопка должна показывать состояние панели, фокус должен перемещаться предсказуемо, а после закрытия фокус должен вернуться на исходный элемент. Запасным вариантом может быть диалог, раскрываемый блок или обычный раздел, но действия и отмена должны сохраниться.

Проверьте четыре результата на синтетическом содержимом: окно открылось, запрос отклонён, функция отсутствует, окно закрыто после показа. BotBrowser может повторять такие проверки там, где исполнитель предоставляет API, но не заставляет движок поддерживать его. Сравнивайте выполнение задачи и восстановление, а не обещайте одинаковое поведение всех браузеров.

Матрица поддержки и размеры

Разделяйте в тесте четыре вопроса: существует ли API, сохраняется ли пользовательская активация, создал ли Promise пригодный документ и вернулась ли задача на страницу после закрытия. Для каждого результата нужна своя мера: отсутствие свойства требует запасного пути, отклонённый запрос требует новой кнопки пользователя, созданное окно с неверными стилями требует исправления ресурсов, а закрытие требует восстановления состояния и фокуса. Запрошенные ширина и высота являются подсказками: браузер может их ограничить или изменить размещение. Измеряйте итоговый viewport и при малом размере используйте вертикальную раскладку и крупные элементы управления.

Состояние, ошибки и отмена

Вспомогательное окно не должно быть единственным источником истины. Храните выбранный элемент и состояние задачи на странице, а в новый документ передавайте только небольшой обезличенный модельный объект. Перемещение узла меняет его owner document и может изменить стили, обработчики, фокус и формы; явно настраивайте и разбирайте панель, удаляя обработчики при закрытии. Проверяйте отклонение запроса, немедленное закрытие, навигацию, отказ таблицы стилей и отсутствие зависимости. Каждый путь должен сохранить исходную задачу, по возможности вернуть фокус и оставить действие внутри страницы. Закрытие панели может быть обычной отменой, а не ошибкой.

Приватность и проверка BotBrowser

Перед выпуском выясните, какие данные копируются, достаточно ли обезличенного резюме, какая телеметрия сохраняется и что происходит при закрытии любого документа. Оставляйте только агрегированный результат ('opened', 'unsupported', 'rejected' или 'closed') с назначением и сроком хранения; не отправляйте содержимое, идентификаторы окон, аккаунты, историю или полный объект возможностей. BotBrowser может повторить разрешённый fixture с синтетическими данными, сравнить видимые размеры и проверить восстановление после закрытия, если исполнитель предоставляет API. Это описывает заявленную сборку, профиль, дату и маршрут, но не доказывает универсальную поддержку и не выдаёт разрешения.

Чек-лист выпуска и обновлений

Проверьте активацию мышью и клавиатурой, видимую кнопку закрытия, возврат фокуса, равноценный запасной путь, узкий viewport, отсутствие таблицы стилей, навигацию и немедленное закрытие. После обновления браузера, политики или компонента повторяйте ту же матрицу, меняя за раз только один вход. Храните лишь версию, семейство ОС, ревизию, запрошенный размер, способ активации и код результата. Отличие движков является фактом совместимости этих версий, а не личностью пользователя и не причиной создавать постоянный идентификатор.

Выбор запасного пути и повторный тест

Выбирайте запасной путь по задаче: помощь при чтении может стать боковой панелью с заголовком и ссылкой перехода; элементы управления встречей могут остаться в панели страницы; расшифровку можно показать в подписанном диалоге с явным закрытием. Повторное использование логики компонента уменьшает различия между окнами. Не делайте запасной вариант зависимым от другой необязательной API или новой цепочки разрешений. Если зависимость отсутствует, объясните последствия и сохраните основное действие.

После обновления браузера, политики, фокуса или стилей повторите матрицу с той же синтетической панелью, размером, активацией и закрытием, меняя за раз один вход. Сохраните дату, версию, ревизию fixture и код результата. Снимок экрана может показать доступность элемента после закрытия, но не доказывает универсальную поддержку. Удаляйте имена и содержимое перед передачей снимка.

Поддержка и ответственность

Назначьте ответственного за поддержку, жизненный цикл и возврат фокуса, а другого человека для проверки запасного пути и телеметрии. При расследовании описывайте наблюдаемый эффект, например запрос отклонён без активации, а не догадки об реализации. Агрегированные результаты помогают отличить отсутствие поддержки от регрессии активации; перед изменением запасного пути повторите fixture. В обращениях и журналах не нужны текст пользователя и постоянный идентификатор.

Заключение

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

Продолжение

Сравните этот жизненный цикл с Screen Wake Lock и жизненным циклом сессии браузера.

Public sources

#Document Picture-In-Picture#Разрешения#Окна Браузера#Приватность

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.