전체 화면 API

현행 표준 — 마지막 업데이트

참여하기:
GitHub whatwg/fullscreen (새 이슈, 오픈된 이슈)
Matrix에서 채팅하기
커밋:
GitHub whatwg/fullscreen/commits
이 커밋 기준 스냅샷
@fullscreenapi
테스트:
web-platform-tests fullscreen/ (진행 중인 작업)
번역 (비규범):
日本語
简体中文
한국어

개요

전체 화면 API 현행 표준은 요소가 전체 화면으로 표시될 수 있도록 하는 API를 정의합니다.

1. 용어

이 명세서는 Infra 표준에 의존합니다. [INFRA]

이 명세서에서 사용되는 대부분의 용어는 CSS, DOM, HTML, 그리고 Web IDL에서 가져온 것입니다. [CSS] [DOM] [HTML] [WEBIDL]

2. 모델

모든 요소fullscreen flag와 연관되어 있습니다. 별도의 명시가 없는 한, 해당 값은 설정되어 있지 않습니다.

모든 iframe 요소iframe fullscreen flag와 연관되어 있습니다. 별도의 명시가 없는 한, 해당 값은 설정되어 있지 않습니다.

모든 문서fullscreen element와 연관되어 있습니다. fullscreen elementtop layer에서 fullscreen flag가 설정된 가장 위에 있는 요소이며, 없다면 null입니다.

모든 문서pending fullscreen 이벤트 목록과 연관되어 있으며, 이는 (string, 요소)로 구성된 튜플순서가 지정된 집합입니다. 초기값은 비어 있습니다.

element를 전체 화면으로 만들기 위한 방법:

  1. hideUntilelement, null, false가 주어진 상태로 최상위 popover 조상을 실행한 결과로 둔다.

  2. elementnode document, hideUntil, false, true가 주어진 상태로 popover들을 다음까지 숨기기를 실행한다.

  3. elementfullscreen flag를 설정한다.

  4. element가 주어진 상태로 top layer에서 즉시 제거한다.

  5. element가 주어진 상태로 top layer에 추가한다.

element를 전체 화면 해제하려면, elementfullscreen flag, iframe fullscreen flag(있는 경우), keyboard lock flag를 unset하고, 주어진 elementtop layer에서 즉시 제거한다.

document의 전체 화면을 해제하기전체 화면 해제 알고리즘을 요소 각각에 대해 실행합니다. 이때 documenttop layer에서 fullscreen flag가 설정된 요소를 찾아 실행합니다.


document의 전체 화면을 완전히 종료하기 알고리즘은 다음과 같습니다:

  1. documentfullscreen element가 null이면, 알고리즘을 종료합니다.

  2. 전체 화면 해제 알고리즘을 fullscreen flag가 설정된 요소 각각에 대해 실행합니다. 단, documentfullscreen element는 제외합니다.

  3. 전체 화면 종료 알고리즘을 document에 대해 실행합니다.

removing stepsremovedNode와 함께 실행될 때, 다음을 수행합니다:

  1. documentremovedNodenode document로 설정합니다.

  2. nodesremovedNodeshadow-including inclusive descendantsfullscreen flag가 설정된 요소로, shadow-including tree order 순서대로 구성합니다.

  3. 각각의 node에 대해 다음을 수행합니다:

    1. nodedocumentfullscreen element인 경우, 전체 화면 종료 알고리즘을 document에 대해 실행합니다.

    2. 그 외의 경우, node의 전체 화면 해제 알고리즘을 실행합니다.

    3. documenttop layernode포함하고 있다면, 즉시 top layer에서 제거 알고리즘을 node에 대해 실행합니다.

      다른 명세서에서도 top layer에서 요소를 추가/제거할 수 있으므로, nodedocumentfullscreen element가 아닐 수 있습니다. 예를 들어, node가 열린 dialog 요소일 수 있습니다.

unloading document cleanup stepsdocument와 함께 실행될 때, 전체 화면 완전 종료 알고리즘을 document에 대해 실행합니다.


전체 화면이 지원됨은 이전에 설정된 사용자 환경설정, 보안 위험 또는 플랫폼 제한이 없을 때를 의미합니다.


전체 화면 단계 실행하기 알고리즘을 document document에 대해 실행하려면 다음을 수행합니다:

  1. pendingEventsdocumentpending fullscreen 이벤트 목록으로 설정합니다.

  2. 비우기 알고리즘을 documentpending fullscreen 이벤트 목록에 대해 실행합니다.

  3. 각각의 (type, element) 튜플에 대해 다음을 수행합니다:

    1. elementconnected 상태이고, node documentdocument인 경우 targetelement로, 그렇지 않으면 targetdocument로 설정합니다.

    2. 이벤트 발생 알고리즘을 type 이름으로, bubblescomposed 속성 값을 true로 하여 target에서 실행합니다.

이 단계들은 HTML에서 정의된 이벤트 루프와 통합됩니다. [HTML]


모든 요소에는 연관된 keyboard lock flag가 있다. 달리 명시되지 않는 한 이는 unset 상태이다.

문서는 자신의 fullscreen element가 null이 아니고, 그 fullscreen elementkeyboard lock flag가 set되어 있을 때 keyboard lock가 활성 상태이며, 그렇지 않으면 비활성 상태이다.

3. API

enum FullscreenNavigationUI {
  "auto",
  "show",
  "hide"
};

enum FullscreenKeyboardLock {
  "browser",
  "none"
};

dictionary FullscreenOptions {
  FullscreenKeyboardLock keyboardLock = "none";
  FullscreenNavigationUI navigationUI = "auto";
};

partial interface Element {
  Promise<undefined> requestFullscreen(optional FullscreenOptions options = {});

  attribute EventHandler onfullscreenchange;
  attribute EventHandler onfullscreenerror;
};

partial interface Document {
  [LegacyLenientSetter] readonly attribute boolean fullscreenEnabled;
  [LegacyLenientSetter, Unscopable] readonly attribute boolean fullscreen; // historical

  Promise<undefined> exitFullscreen();

  attribute EventHandler onfullscreenchange;
  attribute EventHandler onfullscreenerror;
};

partial interface mixin DocumentOrShadowRoot {
  [LegacyLenientSetter] readonly attribute Element? fullscreenElement;
};
promise = element . requestFullscreen([options])
element를 전체 화면으로 표시하고, 완료되면 promise를 resolve한다.

제공된 경우, optionsnavigationUI 멤버는 전체 화면 중 navigation UI를 표시하는 것이 선호되는지 여부를 나타낸다. "show"로 설정된 경우, 화면 공간보다 navigation의 단순성이 선호되고, "hide"로 설정된 경우 더 많은 화면 공간이 선호된다. 사용자 에이전트는 언제나 애플리케이션의 선호보다 사용자의 선호를 우선할 수 있다. 기본값 "auto"는 애플리케이션의 선호가 없음을 나타낸다.

제공된 경우, optionskeyboardLock 멤버는 제공된 keyboard lock 모드가 적용될지 여부를 나타낸다.

"browser"로 설정된 경우, keyboard lock이 적용될 수 있다.

사용자 에이전트는 언제나 애플리케이션의 선호보다 사용자의 선호를 우선할 수 있다. 기본값 "none"은 keyboard lock이 적용되지 않음을 나타낸다.

document . fullscreenEnabled

document요소를 전체 화면으로 표시할 수 있고 fullscreen이 지원되면 true를 반환하고, 그렇지 않으면 false를 반환한다.

promise = document . exitFullscreen()

documentfullscreen element가 전체 화면으로 표시되는 것을 중지하고, 완료되면 promise를 resolve한다.

document . fullscreenElement

documentfullscreen element를 반환한다.

shadowroot . fullscreenElement

shadowrootfullscreen element를 반환한다.

요소 element에 대한 fullscreen element ready check는 다음이 모두 true이면 true를 반환하고, 그렇지 않으면 false를 반환한다:

requestFullscreen(options) 메서드 단계는 다음과 같습니다:

  1. pendingDocthisnode document로 설정합니다.

  2. promise를 새 프로미스로 생성합니다.

  3. pendingDocfully active가 아니면, promiseTypeError 예외로 reject하고 promise를 반환합니다.

  4. error를 false로 설정합니다.

  5. 다음 조건 중 하나라도 false이면 error를 true로 설정합니다:

  6. error가 false이면, consume user activation 알고리즘을 pendingDocrelevant global object에 적용합니다.

  7. promise를 반환하고, 나머지 단계는 병렬로 실행합니다.

  8. error가 false이면, pendingDocnode navigabletop-level traversableactive document의 viewport 크기를 재설정합니다. 이때 options["navigationUI"] 값을 반영할 수 있습니다:

    viewport 크기
    "hide" 출력 장치의 화면 전체 크기
    "show" 출력 장치의 화면 크기를 페이지 네비게이션 컨트롤이 표시될 수 있도록 제한
    "auto" 사용자 에이전트가 정의하지만, 위 둘 중 하나와 일치함

    사용자가 전체 화면을 해제하는 방법에 대한 메시지를 선택적으로 표시할 수 있습니다.

  9. 다음 조건 중 하나라도 false이면 error를 true로 설정합니다:

  10. error가 true이면:

    1. Append (fullscreenerror, this)를 pendingDocpending fullscreen 이벤트 목록에 추가합니다.

    2. promiseTypeError 예외로 reject하고, 이 단계들을 종료합니다.

  11. fullscreenElements순서가 지정된 집합으로 생성하고, 초기값은 this 하나만 포함합니다.

  12. 다음 반복을 수행합니다:

    1. lastfullscreenElements의 마지막 item으로 설정합니다.

    2. containerlastnode navigablecontainer로 설정합니다.

    3. container가 null이면 break합니다.

    4. Append containerfullscreenElements에 추가합니다.

  13. fullscreenElements 내의 각 element에 대해 반복한다:

    1. docelementnode document로 둔다.

    2. elementdocfullscreen element이면, continue.

      아무것도 변경되지 않았을 때는 observer에게 알릴 필요가 없다.

    3. elementthis이고, thisiframe 요소이면, elementiframe fullscreen flag를 설정한다.

    4. doc 내에서 element를 전체 화면으로 만든다.

    5. (fullscreenchange, element)를 docpending fullscreen event 리스트추가한다.

    요소들이 전체 화면 처리되는 순서는 관찰 가능하지 않다. 왜냐하면 fullscreen 단계를 실행하는 것이 tree order로 호출되기 때문이다.

  14. options["keyboardLock"]의 값에 따라:

    "browser"

    thiskeyboard lock flag를 설정한다.

    "none"

    thiskeyboard lock flag를 unset한다.

  15. promise를 undefined로 resolve한다.

프로세스 분리된 navigable 구현은 독자에게 맡깁니다. 개선 제안 환영합니다.

fullscreenEnabled getter 단계는, this가 "fullscreen" 기능을 사용하도록 허용되어 있고 fullscreen이 지원되면 true를 반환하고, 그렇지 않으면 false를 반환한다.

fullscreen getter 단계는, thisfullscreen element가 null이면 false를 반환하고, 그렇지 않으면 true를 반환한다.

대신 fullscreenElement attribute를 사용하라.

fullscreenElement getter 단계는 다음과 같다:

  1. thisshadow root이고, 그 hostconnected가 아니면 null을 반환한다.

  2. candidatefullscreen elementthis에 대해 retargeting한 결과로 둔다.

  3. candidatethis가 같은 tree 안에 있으면 candidate를 반환한다.

  4. null을 반환한다.

문서는, 자신의 top layer 안에 fullscreen flag가 설정된 요소가 정확히 하나 있으면 simple fullscreen document라고 한다.

문서top layer 안에 두 개의 요소가 있어도 simple fullscreen document가 될 수 있다. 예를 들어, fullscreen element에 더해 open 상태인 dialog 요소가 있을 수 있다.

doc이 주어졌을 때 전체 화면 해제할 문서를 수집하려면, 다음 단계를 실행한다:

  1. docsdoc으로 구성된 ordered set으로 둔다.

  2. true인 동안 반복한다:

    1. lastDocdocs의 마지막 문서로 둔다.

    2. 단언: lastDocfullscreen element는 null이 아니다.

    3. lastDocsimple fullscreen document가 아니면, break.

    4. containerlastDocnode navigablecontainer로 둔다.

    5. container가 null이면 break.

    6. containeriframe fullscreen flag가 설정되어 있으면, break.

    7. containernode documentdocs추가한다.

  3. docs를 반환한다.

    이는 fullscreen element전체 화면 해제될 문서들의 set이다. 하지만 docs 안의 마지막 문서는 자신의 top layer 안에 fullscreen flag가 설정된 요소가 둘 이상 있을 수 있으며, 이 경우 그 문서는 여전히 fullscreen 상태로 남는다.

문서 docfullscreen을 종료하려면, 다음 단계를 실행한다:

  1. promise를 새 promise로 둔다.

  2. docfully active가 아니거나 docfullscreen element가 null이면, promiseTypeError 예외로 reject하고 promise를 반환한다.

  3. resize를 false로 둔다.

  4. docs를 주어진 doc에 대해 전체 화면 해제할 문서들을 수집한 결과로 둔다.

  5. topLevelDocdocnode navigabletop-level traversableactive document로 둔다.

  6. topLevelDocdocs 안에 있고, 그것이 simple fullscreen document이면, doctopLevelDoc으로 설정하고 resize를 true로 설정한다.

  7. docfullscreen elementconnected가 아니면:

    1. (fullscreenchange, docfullscreen element)를 docpending fullscreen event 리스트추가한다.

    2. docfullscreen element전체 화면 해제한다.

  8. promise를 반환하고, 나머지 단계를 병렬로 실행한다.

  9. doc으로 screen orientation을 완전히 unlock하는 단계를 실행한다.

  10. resize가 true이면, doc의 viewport를 그 "normal" 크기로 resize한다.

  11. docfullscreen element가 null이면, promise를 undefined로 resolve하고 이 단계를 종료한다.

  12. exitDocs를 주어진 doc에 대해 전체 화면 해제할 문서들을 수집한 결과로 둔다.

  13. descendantDocs를, 존재한다면 fullscreen element가 null이 아닌 docdescendant navigablesactive documents로 구성된, tree orderordered set으로 둔다.

  14. exitDocs 내의 각 exitDoc에 대해 반복한다:

    1. (fullscreenchange, exitDocfullscreen element)를 exitDocpending fullscreen event 리스트추가한다.

    2. resize가 true이면, exitDoc를 전체 화면 해제한다.

    3. 그렇지 않으면, exitDocfullscreen element전체 화면 해제한다.

  15. descendantDocs 내의 각 descendantDoc에 대해 반복한다:

    1. (fullscreenchange, descendantDocfullscreen element)를 descendantDocpending fullscreen event 리스트추가한다.

    2. descendantDoc를 전체 화면 해제한다.

    문서들이 전체 화면 해제되는 순서는 관찰 가능하지 않다. 왜냐하면 fullscreen 단계를 실행하는 것이 tree order로 호출되기 때문이다.

  16. promise를 undefined로 resolve한다.

exitFullscreen() 메서드 단계는 this에 대해 fullscreen 종료를 실행한 결과를 반환하는 것이다.


다음은 ElementDocument 객체가 event handler IDL attributes로 지원해야 하는 event handlers와 그에 대응하는 event handler event types이다:

event handler event handler event type
onfullscreenchange fullscreenchange
onfullscreenerror fullscreenerror

이들은 ShadowRoot 또는 Window 객체에서는 지원되지 않으며, 어떤 namespace에서도 Element 객체에 대해 대응하는 event handler content attributes는 없다.

4. UI

사용자 에이전트는 requestFullscreen()exitFullscreen()를 활용하여 네이티브 미디어 전체 화면 컨트롤을 구현할 것을 권장합니다.

사용자가 종료 요청을 시작하면, 이는 전체 화면 완전 종료 알고리즘을 종료 요청 단계의 일부로 트리거합니다. 이는 모든 종료 감시자보다 우선합니다.

사용자 에이전트는 필요하다고 판단할 때마다 close request 또는 exitFullscreen() 호출 없이도 모든 fullscreen session을 종료할 수 있다.

keyboard locking이 활성 상태일 때는, 가능하면 브라우저 UI indicator를 통해 사용자에게 명확히 알려야 한다.

사용자가 keyboard locking을 override하여 제어를 system 또는 user agent로 되돌릴 수 있는 단순하고 직관적인 방법이 있어야 한다.

5. 렌더링

이 섹션은 HTML의 렌더링 섹션과 동일하게 해석되어야 합니다. [HTML]

5.1. :fullscreen 의사 클래스

:fullscreen 의사 클래스는 다음 조건 중 하나라도 true인 요소 element에 대해 반드시 일치해야 합니다:

이는 fullscreenElement API와 다릅니다. 해당 API는 최상위 fullscreen element를 반환합니다.

5.2. 사용자 에이전트 수준 스타일 시트 기본값

@namespace "http://www.w3.org/1999/xhtml";

*|*:not(:root):fullscreen {
  position:fixed !important;
  inset:0 !important;
  margin:0 !important;
  box-sizing:border-box !important;
  min-width:0 !important;
  max-width:none !important;
  min-height:0 !important;
  max-height:none !important;
  width:100% !important;
  height:100% !important;
  transform:none !important;

  /* intentionally not !important */
  object-fit:contain;
}

iframe:fullscreen {
  border:none !important;
  padding:0 !important;
}

*|*:not(:root):fullscreen::backdrop {
  background:black;
}

6. 키보드 잠금

키보드 잠금은 전체 화면에서 실행되는 웹 애플리케이션이 보통 system 또는 user agent가 처리하는 특정 key 입력을 가로챌 수 있게 하여 그 기능을 향상시킨다. 이는 ESC나 function key 같은 키가 애플리케이션 기능에 필수적인 게임 또는 원격 데스크톱 애플리케이션 같은 상황에서 유용하다.

keyboard lock은 웹 애플리케이션이 key 입력을 직접 capture하고 처리할 수 있게 하며, 일반적으로 user agent 또는 운영 체제가 실행하는 기본 동작을 우회한다. 보통 user agent 또는 system-level 동작을 trigger하는 key event는 대신 전체 화면의 웹 애플리케이션으로 redirect된다. 이러한 key event(개별 key 또는 keyboard shortcut에 대한 것)는 keyboard lock이 활성 상태인 동안 아무 동작이 없을 수도 있고, 여전히 동일한 동작을 가질 수도 있지만 웹 페이지가 preventDefault()를 호출하여 그 동작을 취소할 수 있게 할 수 있다.

documentkeyboard lock이 활성 상태에서 비활성 상태로 변경될 때마다, user agent는 keyboard lock을 비활성화하고 keyboard 입력 처리를 user agent 및 운영 체제의 기본 동작으로 복원해야 한다.

User agent는 전체 화면을 종료하기 위한 추가 입력을 reserve해야 한다. 또한 Windows의 Ctrl+Alt+Del처럼 보안상의 이유로 가로챌 수 없는 일부 system-level key sequence 또는 조합도 있다.

예를 들어, Esc key를 사용해 전체 화면을 종료하는 user agent는 keyboard lock을 사용하여 key press 시 즉시 종료되는 것을 방지하고, 대신 전체 화면 종료에 long press를 요구한다. 이러한 일부 user agent는 fullscreen session에 partial keyboard lock을 암묵적으로 부여하기도 하며, 이 경우 Esc key가 명시적 keyboard lock의 영향을 받는 유일한 key일 수 있다.

7. 권한 정책 통합

이 명세서는 "fullscreen" 문자열로 식별되는 정책 제어 기능을 정의합니다. 해당 기능의 기본 허용 목록'self'입니다.

문서권한 정책은 해당 문서의 모든 콘텐츠가 전체 화면으로 전환될 수 있는지 여부를 결정합니다. 문서에서 비활성화된 경우, 해당 문서의 모든 콘텐츠는 전체 화면 기능을 사용할 수 없습니다.

HTML allowfullscreen 속성은 iframe 요소에 중첩된 문서의 컨테이너 정책에 영향을 미칩니다. allow 속성으로 재정의하지 않는 한, iframe에 allowfullscreen을 설정하는 것은 <iframe allow="fullscreen *">와 동일하며, 자세한 내용은 Permissions Policy § 6.3.1 allowfullscreen에서 설명합니다.

8. 보안 및 개인정보 보호 고려사항

User agent는, 예를 들어 overlay를 통해, 최종 사용자가 무언가가 전체 화면으로 표시되고 있음을 인식할 수 있도록 보장해야 한다. User agent는 항상 작동하는 전체 화면 종료 수단을 제공하고, 이를 사용자에게 알려야 한다. 이는 사이트가 전체 화면에서 user agent 또는 심지어 운영 체제 환경을 재현하여 최종 사용자를 spoofing하는 것을 방지하기 위한 것이다. 다음의 정의도 참조하라: requestFullscreen().

child navigable 안의 콘텐츠가 fullscreen으로 전환될 수 있게 하려면, permissions policy를 통해 명시적으로 허용되어야 한다. 이는 HTML iframe 요소의 allowfullscreen attribute를 통해서나, HTML iframe 요소의 allow attribute 안의 적절한 선언을 통해서나, 또는 그것이 중첩되는 document와 함께 전달되는 `Permissions-Policy` HTTP header를 통해 이루어질 수 있다.

이는 예를 들어 명시적 허가 없이 third-party 콘텐츠가 fullscreen으로 전환되는 것을 방지한다.

keyboard lock을 적용할 때는, 주로 system control 또는 privacy 위험(Alt+Tab, Ctrl+Alt+Del 같은 것)을 수반하지 않는 제한된 key set만 API를 통해 lock될 수 있다.

keyboard lock을 적용할 때, user agent는 사용자가 lock을 override할 수 있게 하는 등, 이 기능의 남용을 방지하기 위한 safeguard를 구현해야 한다.

User agent는 keyboard lock을 무시하는 사용자 선호를 제공할 수 있다(예를 들어 특정 site 또는 전역 등 임의의 granularity로). 마찬가지로, 일부 platform에는 keyboard가 없을 수 있으며, 이 경우 user agent는 keyboard lock 상태를 무시할 수 있다. 그러나 fingerprinting을 피하기 위해, 이는 requestFullscreen() 메서드의 웹에서 관찰 가능한 동작에 영향을 주거나 다른 방식으로 노출되어서는 안 된다.

이 명세서는 이전에 ::backdrop 및 문서의 top layer 개념에 대한 정의를 포함하고 있었습니다.

감사의 글

초기 모델을 설계하고 뛰어난 공헌을 해주신 Robert O’Callahan께 감사드립니다.

또한 아래 분들께도 감사드립니다.
Andy Earnshaw, Changwan Hong, Chris Pearce, Darin Fisher, Dave Tapuska, fantasai, Giuseppe Pascale, Glenn Maynard, Ian Clelland, Ian Hickson, Ignacio Solla, João Eiras, Josh Soref, Kagami Sascha Rosylight, Matt Falkenhagen, Mihai Balan, Mounir Lamouri, Øyvind Stenhaug, Pat Ladd, Rafał Chłodnicki, Riff Jiang, Rune Lillesveen, Sigbjørn Vik, Simon Pieters, Tab Atkins-Bittner, Takayoshi Kochi, Theresa O’Connor, triple-underscore, Vincent Scheib, 그리고 Xidorn Quan 모두 훌륭한 공헌을 해주셨습니다.

이 표준의 편집자는 Philip Jägenstedt (Google, philip@foolip.org)입니다. 최초 작성자는 Anne van Kesteren (Apple, annevk@annevk.nl)입니다. Tantek Çelik (Mozilla, tantek@cs.stanford.edu)는 법적 문제를 해결해 주셨습니다.

지적 재산권

Copyright © WHATWG (Apple, Google, Mozilla, Microsoft). 이 저작물은 Creative Commons Attribution 4.0 International License로 라이선스가 부여됩니다. 일부가 소스 코드에 통합된 경우, 해당 부분은 BSD 3-Clause License로 소스 코드에서 라이선스가 부여됩니다.

이 문서는 현행 표준입니다. 특허 검토 버전에 관심이 있으신 분은 현행 표준 검토 초안을 참고하시기 바랍니다.

색인

이 명세서에서 정의한 용어

참조로 정의한 용어

참고 문헌

규범적 참고 문헌

[CSS]
Bert Bos; 외. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. URL: https://drafts.csswg.org/css2/
[CSS-POSITION-4]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 4. URL: https://drafts.csswg.org/css-position-4/
[DOM]
Anne van Kesteren. DOM 표준. 현행 표준. URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; 외. HTML 표준. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 표준. 현행 표준. URL: https://infra.spec.whatwg.org/
[MATHML]
Patrick D F Ion; Robert R Miner. Mathematical Markup Language (MathML™) 1.01 Specification. 2023년 3월 7일. REC. URL: https://www.w3.org/TR/REC-MathML/
[PERMISSIONS-POLICY-1]
Ian Clelland. Permissions Policy. URL: https://w3c.github.io/webappsec-permissions-policy/
[SCREEN-ORIENTATION]
Marcos Caceres. Screen Orientation. URL: https://w3c.github.io/screen-orientation/
[SVG]
Erik Dahlström; 외. Scalable Vector Graphics (SVG) 1.1 (Second Edition). 2011년 8월 16일. REC. URL: https://www.w3.org/TR/SVG11/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 표준. 현행 표준. URL: https://webidl.spec.whatwg.org/

IDL 색인

enum FullscreenNavigationUI {
  "auto",
  "show",
  "hide"
};

enum FullscreenKeyboardLock {
  "browser",
  "none"
};

dictionary FullscreenOptions {
  FullscreenKeyboardLock keyboardLock = "none";
  FullscreenNavigationUI navigationUI = "auto";
};

partial interface Element {
  Promise<undefined> requestFullscreen(optional FullscreenOptions options = {});

  attribute EventHandler onfullscreenchange;
  attribute EventHandler onfullscreenerror;
};

partial interface Document {
  [LegacyLenientSetter] readonly attribute boolean fullscreenEnabled;
  [LegacyLenientSetter, Unscopable] readonly attribute boolean fullscreen; // historical

  Promise<undefined> exitFullscreen();

  attribute EventHandler onfullscreenchange;
  attribute EventHandler onfullscreenerror;
};

partial interface mixin DocumentOrShadowRoot {
  [LegacyLenientSetter] readonly attribute Element? fullscreenElement;
};

MDN

Document/exitFullscreen

In all current engines.

Firefox64+Safari16.4+Chrome71+
Opera58+Edge79+
Edge (Legacy)NoneIENone
Firefox for Android?iOS SafariNoneChrome for Android?Android WebView71+Samsung Internet?Opera Mobile50+
MDN

Document/fullscreenchange_event

In all current engines.

Firefox64+Safari16.4+Chrome71+
Opera58+Edge79+
Edge (Legacy)NoneIENone
Firefox for Android?iOS SafariNoneChrome for Android?Android WebView71+Samsung Internet?Opera Mobile50+

Element/fullscreenchange_event

In all current engines.

Firefox64+Safari16.4+Chrome71+
Opera58+Edge79+
Edge (Legacy)NoneIENone
Firefox for Android?iOS SafariNoneChrome for Android?Android WebView71+Samsung Internet?Opera Mobile50+
MDN

Document/fullscreenElement

In all current engines.

Firefox64+Safari16.4+Chrome71+
Opera58+Edge79+
Edge (Legacy)NoneIENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile50+
MDN

Document/fullscreenEnabled

In all current engines.

Firefox64+Safari16.4+Chrome71+
Opera58+Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS SafariNoneChrome for Android?Android WebView?Samsung Internet?Opera Mobile50+
MDN

Document/fullscreenerror_event

In all current engines.

Firefox64+Safari16.4+Chrome71+
Opera58+Edge79+
Edge (Legacy)NoneIENone
Firefox for Android?iOS SafariNoneChrome for Android?Android WebView71+Samsung Internet?Opera Mobile50+

Element/fullscreenerror_event

In all current engines.

Firefox64+Safari16.4+Chrome71+
Opera58+Edge79+
Edge (Legacy)NoneIENone
Firefox for Android?iOS SafariNoneChrome for Android?Android WebView71+Samsung Internet?Opera Mobile50+
MDN

Element/requestFullscreen

In all current engines.

Firefox64+Safari16.4+Chrome71+
Opera58+Edge79+
Edge (Legacy)NoneIENone
Firefox for Android64+iOS SafariNoneChrome for Android?Android WebView71+Samsung Internet?Opera Mobile50+
MDN

Element

In all current engines.

Firefox1+Safari1+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE4+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
MDN

ShadowRoot/fullscreenElement

In all current engines.

Firefox64+Safari16.4+Chrome71+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

:fullscreen

Firefox64+SafariNoneChrome71+
Opera?Edge79+
Edge (Legacy)12+IENone
Firefox for Android?iOS SafariNoneChrome for Android?Android WebView71+Samsung Internet?Opera Mobile?
MDN

Headers/Feature-Policy/fullscreen

In only one current engine.

FirefoxNoneSafariNoneChrome62+
Opera?Edge79+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?

Headers/Permissions-Policy/fullscreen

In only one current engine.

FirefoxNoneSafariNoneChrome88+
Opera?Edge88+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?