1. 用語
この仕様は Infra Standard に依存します。[INFRA]
この仕様で使用されるほとんどの用語は、CSS、DOM、HTML、Web IDL からのものです。[CSS] [DOM] [HTML] [WEBIDL]
2. モデル
すべての 要素には、fullscreen flag が関連付けられています。特に指定がない限り、これは未設定です。
すべての
iframe
要素には、iframe fullscreen flag が関連付けられています。特に指定がない限り、これは未設定です。
すべての 文書には、fullscreen element が関連付けられています。 fullscreen element は、 文書 の top layer において fullscreen flag が設定されている最上位の 要素 です。該当しない場合は null です。
すべての 文書には、list of pending fullscreen events が関連付けられています。 これは (string, 要素) からなる タプル の 順序付き集合 です。初期状態は空です。
element を fullscreen にする手順:
-
hideUntil に、topmost popover ancestor に element, null, false を渡して実行した結果を設定する。
-
hideUntil が null の場合、element の node document を hideUntil に設定する。
-
hide all popovers until に hideUntil, false, true を渡して実行する。
-
element の fullscreen flag を設定する。
-
Remove from the top layer immediately に element を渡して実行する。
- Add to the top layer に element を渡して実行する。
element の fullscreen を解除するには、 element の fullscreen flag および iframe fullscreen flag(存在する場合)を未設定にし、 remove from the top layer immediately に element を渡して実行する。
document の fullscreen を解除するには、 document の top layer 内で fullscreen flag が設定されているすべての 要素 に対して unfullscreen を実行する。
fully exit fullscreen を document document に対して実行するには、次の手順を実行する:
-
document の fullscreen element が null なら、これ以降の手順を終了する。
-
document の top layer 内で、fullscreen flag が設定されている fullscreen element 以外の要素について Unfullscreen elements を実行する。
-
Exit fullscreen document.
removing steps が removedNode で実行されるときは、次の手順を実行する:
-
document に removedNode の node document を設定する。
-
nodes に removedNode の shadow-including inclusive descendants のうち fullscreen flag が設定されているものを shadow-including tree order で取得する。
-
各 node について、次のとおり:
-
node が document の fullscreen element なら、 exit fullscreen document を実行する。
-
それ以外の場合は、node の fullscreen を解除する。
-
document の top layer が node を 含む場合、 remove from the top layer immediately に node を渡して実行する。
他の仕様でも top layer に要素を追加・削除できるため、 node が document の fullscreen element でない場合もあります。 例えば node が開いている
dialog
要素である場合などです。
-
unloading document cleanup steps が document で実行されるとき、 fully exit fullscreen を document に実行する。
Fullscreen がサポートされるのは、 事前に設定されたユーザーの好み、安全上のリスク、またはプラットフォームの制限がない場合です。
run the fullscreen steps を document document に対して実行するには、次の手順を実行する:
-
pendingEvents に document の list of pending fullscreen events を設定する。
-
各 (type, element) について、pendingEvents の中で:
-
element が connected かつ、 その node document が document なら target に element を設定し、そうでなければ target に document を設定する。
-
Fire an event という名前で type、
bubbles
とcomposed
属性を true にして target でイベントを発火する。
-
これらの手順は HTML で定義されている event loop と統合されています。[HTML]
3. API
enum {
FullscreenNavigationUI "auto" ,"show" ,"hide" };dictionary {
FullscreenOptions FullscreenNavigationUI = "auto"; };
navigationUI 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 ; // historicalPromise <undefined >exitFullscreen ();attribute EventHandler onfullscreenchange ;attribute EventHandler onfullscreenerror ; };partial interface mixin DocumentOrShadowRoot { [LegacyLenientSetter ]readonly attribute Element ?fullscreenElement ; };
promise = element . requestFullscreen([options])
-
element を全画面表示し、完了時に promise が解決されます。
options が指定された場合、options の
navigationUI
メンバーは、全画面表示中にナビゲーション UI の表示を優先するかどうかを示します。 "show
" の場合はナビゲーションの簡易さを画面スペースよりも優先し、"hide
" の場合は画面スペースをより優先します。ユーザーエージェントは常にアプリケーションの設定よりもユーザーの好みを優先してもかまいません。デフォルト値 "auto
" はアプリケーションの好みがないことを示します。 document .
fullscreenEnabled
-
document が 要素 を全画面表示でき、 全画面表示がサポートされている場合は true、そうでなければ false を返します。
promise = document .
exitFullscreen()
-
document の fullscreen element の全画面表示を終了し、完了時に promise が解決されます。
document .
fullscreenElement
-
document の fullscreen element を返します。
shadowroot .
fullscreenElement
-
shadowroot の fullscreen element を返します。
fullscreen element ready check は、要素 element に対して、以下すべてが true の場合 true を返し、そうでなければ false を返します:
-
element が connected である。
-
element の node document が "
fullscreen
" 機能の allowed to use である。 -
element の namespace が HTML namespace でないか、 element の popover visibility state が である。
requestFullscreen(options)
メソッドの
手順は以下の通りです:
-
pendingDoc に this の node document を設定する。
-
promise に新しい promise を作成する。
-
pendingDoc が fully active でない場合、promise を
TypeError
例外で reject し、promise を返す。 -
error に false を設定する。
-
次のいずれかの条件が false の場合、error を true にする:
-
this の namespace が HTML namespace であるか、 this が SVG
svg
または MathMLmath
要素である。[SVG] [MATHML] -
fullscreen element ready check が this に対して true を返す。
-
this の relevant global object が transient activation を持つか、または アルゴリズムが ユーザー生成の向き変更によって起動された場合。
-
-
error が false の場合、consume user activation を pendingDoc の relevant global object で実行する。
-
promise を返し、残りの手順を 並列で実行する。
-
error が false の場合、pendingDoc の node navigable の top-level traversable の active document のビューポートサイズを options["
navigationUI
"] を考慮して変更する(任意):値 ビューポートサイズ " hide
"出力デバイス画面の全サイズ " show
"ユーザーエージェントがページナビゲーションコントロールを表示できるように制限された出力デバイス画面のサイズ " auto
"上記いずれかに一致するユーザーエージェント定義 必要に応じて、ユーザーがこれを元に戻す方法を知らせるメッセージを表示することができます。
-
次のいずれかの条件が false の場合、error を true にする:
-
this の node document が pendingDoc である。
-
fullscreen element ready check が this で true を返す。
-
-
error が true の場合:
-
Append (
fullscreenerror
, this) を pendingDoc の list of pending fullscreen events に追加する。 -
promise を
TypeError
例外で reject し、これ以降の手順を終了する。
-
-
while true:
-
last に fullscreenElements の最後の 要素 を設定する。
-
container に last の node navigable の container を設定する。
-
container が null なら break する。
-
Append で container を fullscreenElements に追加する。
-
-
各 element について fullscreenElements の中で:
-
doc に element の node document を設定する。
-
element が doc の fullscreen element なら continue する。
何も変化していない場合はオブザーバに通知する必要はありません。
-
element が this かつ this が
iframe
要素 なら、element の iframe fullscreen flag を設定する。 -
Fullscreen element を doc で実行する。
-
Append (
fullscreenchange
, element) を doc の list of pending fullscreen events に追加する。
要素が fullscreened される順序は観測できません。run the fullscreen steps が tree order で呼ばれるためです。
-
-
promise を undefined で解決する。
アウトオブプロセスの navigables を持つ実装は読者への課題として残されています。改善案のフィードバック歓迎です。
fullscreenEnabled
ゲッターの手順は、
this が
"fullscreen
"
機能の allowed to use であり、
全画面表示がサポートされている場合 true を返し、
そうでなければ false を返すことです。
fullscreen
ゲッターの手順は、
this の
fullscreen element
が null なら false を返し、そうでなければ true を返すことです。
fullscreenElement
属性を代わりに利用してください。
fullscreenElement
ゲッターの手順は以下の通りです:
-
this が shadow root かつその host が connected でないなら、null を返す。
-
candidate に retargeting を fullscreen element と this で実行した結果を設定する。
-
null を返す。
文書は、その top layer に fullscreen flag が設定されている 要素 がちょうど 1 つだけある場合、 単純な全画面文書(simple fullscreen document)とされます。
文書の top
layer に 要素 が 2 つある場合でも
単純な全画面文書となる場合があります。
例えば、fullscreen
element の他に
開いている
dialog
要素がある場合などです。
collect documents to unfullscreen を doc に対して実行する手順は以下の通りです:
-
docs に doc を含む 順序付き集合 を作成する。
-
while true:
-
lastDoc に docs の最後の 文書 を設定する。
-
保証: lastDoc の fullscreen element は null ではない。
-
container に lastDoc の node navigable の container を設定する。
-
container が null の場合、break する。
-
container の iframe fullscreen flag が設定されている場合、 break する。
-
Append で container の node document を docs に追加する。
-
-
docs を返す。
これは fullscreen element の fullscreen解除を行う文書集合ですが、 docs の最後の文書には 要素 が top layer に複数 fullscreen flag が設定されている場合があり、 その場合その文書は引き続き全画面状態となります。
exit fullscreen を 文書 doc に対して実行する手順は以下の通りです:
-
promise に新しい promise を作成する。
-
doc が fully active でない、または doc の fullscreen element が null の場合、promise を
TypeError
例外で reject し、promise を返す。 -
resize に false を設定する。
-
docs に collect documents to unfullscreen を doc に対して実行した結果を設定する。
-
topLevelDoc に doc の node navigable の top-level traversable の active document を設定する。
-
topLevelDoc が docs に含まれていて、かつ 単純な全画面文書の場合、 doc に topLevelDoc を設定し、 resize を true にする。
-
doc の fullscreen element が connectedでない場合:
-
Append (
fullscreenchange
, doc の fullscreen element) を doc の list of pending fullscreen events に追加する。 -
fullscreen解除 を doc の fullscreen element に対して実行する。
-
-
promise を返し、残りの手順を 並列で実行する。
-
画面の向きを完全に解除する手順 を doc で実行する。
-
resize が true の場合、doc のビューポートを「通常」のサイズに変更する。
-
doc の fullscreen element が null なら、 promise を undefined で解決し、これ以降の手順を終了する。
-
exitDocs に collect documents to unfullscreen を doc に対して実行した結果を設定する。
-
descendantDocs に doc の descendant navigables の active document のうち fullscreen element が null でないものを tree order で順序付き集合として取得する。
-
各 exitDoc について exitDocs の中で:
-
Append (
fullscreenchange
, exitDoc の fullscreen element) を exitDoc の list of pending fullscreen events に追加する。 -
resize が true の場合、exitDoc の fullscreen を解除する。
-
それ以外の場合、fullscreen解除 を exitDoc の fullscreen element に対して実行する。
-
-
各 descendantDoc について descendantDocs の中で:
-
Append (
fullscreenchange
, descendantDoc の fullscreen element) を descendantDoc の list of pending fullscreen events に追加する。
文書が fullscreen解除 される順序は観測できません。 run the fullscreen steps が tree order で呼ばれるためです。
-
-
promise を undefined で解決する。
exitFullscreen()
メソッドの手順は、
exit fullscreen を
this
に対して実行した結果を返すことです。
以下は イベントハンドラ(および対応する
イベントハンドラ イベント型)であり、
Element
および Document
オブジェクトで
event handler IDL attributes としてサポートされなければなりません:
イベントハンドラ | イベントハンドラ イベント型 |
---|---|
onfullscreenchange
| fullscreenchange
|
onfullscreenerror
| fullscreenerror
|
これらは ShadowRoot
や Window
オブジェクトではサポートされていません。また、いかなる名前空間でも Element
オブジェクトに対応する event handler content attributes はありません。
4. UI
ユーザーエージェントは、ネイティブのメディア全画面コントロールの実装に
requestFullscreen()
および exitFullscreen()
を利用することが推奨されます。
ユーザーが クローズリクエスト を開始すると、これは 全画面から完全に退出する アルゴリズムを クローズリクエスト手順の一部として起動します。これは クローズウォッチャー よりも優先されます。
ユーザーエージェントは、ユーザーエージェントが必要と判断した場合、クローズリクエストや
exitFullscreen()
の呼び出しなしで、いつでも全画面セッションを終了することができます。
5. レンダリング
このセクションは HTML のレンダリングセクションと同等に解釈されます。[HTML]
5.1. :fullscreen
疑似クラス
:fullscreen
疑似クラスは、次のいずれかの条件が true である
要素 element にマッチしなければなりません:
-
element の fullscreen flag が設定されている。
-
element が シャドウホスト であり、 retargeting で その node document の fullscreen element を element に対して実行した結果が 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. Permissions Policy 統合
この仕様は、"fullscreen
"
という文字列で識別される
ポリシー制御機能を定義します。
その デフォルト許可リスト は 'self'
です。
文書の permissions policy は、その文書内のコンテンツが全画面表示できるかどうかを決定します。いずれかの文書で無効化されている場合、その文書内のコンテンツは 全画面表示の使用が許可されません。
HTML
allowfullscreen
属性は、iframe
要素の
container policy
に影響します。allow
属性で上書きされない限り、iframe の
allowfullscreen
を設定することは <iframe allow="fullscreen *">
と同等です。
詳細は Permissions
Policy § 6.3.1 allowfullscreen を参照してください。
7. セキュリティとプライバシーに関する考慮事項
ユーザーエージェントは、例えばオーバーレイにより、最終的なユーザーが何かが全画面表示されていることを認識できるようにするべきです。ユーザーエージェントは、常に機能する全画面解除手段を提供し、それをユーザーに通知するべきです。これは、全画面時にサイトがユーザーエージェントやオペレーティングシステムの環境を再現してユーザーを欺くことを防ぐためです。requestFullscreen()
の定義も参照してください。
子ナビゲーブル内のコンテンツが全画面表示を行うには、permissions policy により明示的に許可されている必要があります。
具体的には、HTML
allowfullscreen
属性や
iframe
要素の適切な
allow
属性、またはそのドキュメントを経由して配信される
`Permissions-Policy
` HTTP ヘッダー
で明示的に許可する必要があります。
これにより、例えばサードパーティのコンテンツが明示的な許可なしに全画面表示されることを防ぎます。
過去にホストされていた定義
この仕様では以前、::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 の下でライセンスされます。
これは現行標準です。 特許審査版に興味がある方は 現行標準審査ドラフト をご覧ください。