Кратко

  • Рабочий проект W3C от 3 июля 2012 года описал запрос полноэкранного режима элементом, завершение сеанса документом, верхний слой отображения и выход по указанию пользователя.
  • В 2014 году W3C прекратил работу над этим документом и направил разработчиков к WHATWG. Действующий стандарт обычно требует недавнего действия пользователя, ограничивает встроенный контент и предусматривает надёжный выход.

Представим кинотеатр, в котором расписанием заведуют веб-страницы. Видеоролик просит погасить свет. Игра требует всю стену. Презентация жалуется, что рамка браузера перетягивает внимание. Директор согласен. Но заведующий зданием задаёт вопрос: кто откроет двери после сеанса? Так спецификация изображения превращается в соглашение о власти.

Первый опубликованный рабочий проект W3C от 3 июля 2012 года предлагал короткий набор действий. Элемент вызывал requestFullscreen() и просил показать его во весь экран. Документ вызывал exitFullscreen() и завершал показ. fullscreenElement показывал, какой элемент сейчас на сцене. В том проекте методы возвращали void. Это был Working Draft, а не готовая рекомендация W3C; дата публикации документа также ничего не говорит о первом выпуске функции конкретным браузером.

Разница с большим прямоугольником CSS заключалась в устройстве сцены. Проект помещал полноэкранный элемент в специальный стек документа и в верхний слой контекста просмотра, ближе всего к зрителю в порядке отрисовки. Страница и раньше могла нарисовать огромный блок. Но чтобы занять пространство браузерного окна как особый режим, ей приходилось договариваться с хозяином площадки. Уверенный в себе div не получает свидетельство о собственности на монитор.

Заявку могли отклонить. Алгоритм проверял, находится ли элемент в документе, разрешён ли полноэкранный режим в нужных контекстах и не противоречат ли друг другу вложенные состояния. Тогдашний текст также использовал условие, связанное с правом показывать всплывающее окно, и учитывал заранее заданные предпочтения пользователя, риск безопасности или ограничение платформы. Страница подавала заявку. Браузер ставил печать — либо возвращал бумаги.

Выход был предусмотрен сразу. Если пользователь приказывал браузеру закончить сеанс, начатый через API, проект требовал полностью покинуть полноэкранный режим. Допускалась и подсказка, как выйти. Событие fullscreenchange позволяло странице узнать о смене состояния, даже когда занавес опускал не её скрипт. Плеер мог перестроить кнопки. Продлить сеанс вопреки воле зрителя он не мог.

В заметке W3C от 18 ноября 2014 года хронология делает поворот. W3C прямо сообщил, что работа над этим документом прекращена, и указал на спецификацию Fullscreen группы WHATWG. Проект 2012 года не стал задним числом рекомендацией. Сам полноэкранный режим не исчез. Мастерская стандарта сменила адрес, а вопрос о двери остался прежним.

Действующий живой стандарт WHATWG подробно описывает вход. Теперь requestFullscreen() и exitFullscreen() возвращают Promise. В обычном случае для запроса нужна кратковременная активация от действия пользователя; отдельно указан случай поворота экрана, вызванного пользователем. При принятии заявки активация расходуется. Нажать кнопку просмотра — одно дело. Открыть страницу и внезапно обнаружить, что она выключила свет во всём зале, — совсем другое.

Современная модель по-прежнему использует верхний слой. Текущим полноэкранным элементом документа считается самый верхний элемент этого слоя с соответствующим флагом. :fullscreen помогает оформить изображение, fullscreenchange и fullscreenerror сообщают об изменении или отказе. Эти детали принадлежат нынешнему тексту. Переносить Promise и современную политику разрешений в рабочий проект 2012 года — всё равно что дорисовывать в архивном снимке устройство, которого там ещё не было.

Встроенные страницы делают вопрос полномочий особенно острым. Если стороннее видео находится внутри iframe, может ли оно самостоятельно занять экран посетителя? Нынешний стандарт относит fullscreen к функциям, управляемым политикой разрешений; список разрешённых по умолчанию — 'self'. Вложенному контенту требуется явное разрешение через allowfullscreen, allow либо подходящий заголовок политики. Театр может пустить гастролёров на сцену. Ключи от здания раздаются отдельно.

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

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