WebXR DOM オーバーレイモジュール

W3C 作業草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2024/WD-webxr-dom-overlays-1-20240924/
最新公開バージョン:
https://www.w3.org/TR/webxr-dom-overlays-1/
編集者草案:
https://immersive-web.github.io/dom-overlays/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/webxr-dom-overlays-1/
フィードバック:
GitHub
編集者:
(Google)
元編集者:
(Google)
参加方法:
課題を提出する未解決の課題
メーリングリストアーカイブ
W3C の #immersive-web IRC
不安定な API

この文書で表される API は開発中であり、いつでも変更される可能性があります。

この API の使用に関する追加の文脈については、WebXR DOM オーバーレイ モジュール解説書を参照してください。


概要

WebXR DOM オーバーレイモジュールは、没入型 WebXR セッション中にインタラクティブな 2D Web コンテンツを 表示する仕組みにより、WebXR Device APIを拡張します。この機能が 有効になると、ユーザーエージェントは単一の DOM 要素の内容を、透明背景の 2D 矩形として表示します。

この文書の状態

この節では、公開時点におけるこの文書の状態を説明します。現在の W3C 公開物の一覧およびこの 技術報告書の最新改訂版は、W3C 技術報告書インデックス https://www.w3.org/TR/ で確認できます。

Immersive Web Working Group は、グループがまだ対応していない すべてのバグ報告の一覧を管理しています。この草案では、 作業グループでまだ議論されるべき未解決の課題の一部を強調しています。これらの課題の結論については、 それらが妥当かどうかを含め、まだ何も決定されていません。 未解決の課題に対する仕様テキスト案を含むプルリクエストを強く歓迎します。

この文書は、Immersive Web Working Group により、勧告 トラックを用いた作業草案として公開されました。この文書は、W3C 勧告になることを意図しています。

作業草案としての公開は、W3C およびそのメンバーによる承認を意味するものではありません。これは草案文書であり、 いつでも他の文書によって更新、置換、または廃止される可能性があります。この文書を 作業中のもの以外として引用することは不適切です。

この文書は、W3C 特許ポリシーの下で活動するグループにより作成されました。 W3C は、このグループの成果物に関連して行われた特許 開示の公開リストを維持しています。そのページには、 特許を開示するための手順も含まれています。ある個人が、その個人の考えでは必須 クレームを含む特許を実際に知っている場合、その個人はW3C 特許ポリシー 第 6 節に従って情報を開示しなければなりません。

この文書は、2023年11月03日 W3C プロセス文書に準拠します。

1. はじめに

このモジュールは、没入型 WebXR セッション中にインタラクティブな 2D Web コンテンツを 表示する仕組みを説明します。この機能が有効になると、ユーザーエージェントは単一の DOM 要素の内容を 透明背景の 2D 矩形として表示します。

1.1. 概要

DOM オーバーレイがアクティブな間、UA は、プラットフォームに適した仕組みを用いて DOM オーバーレイの内容とのユーザーインタラクションを可能にします。たとえば XR コントローラーを使用する場合、primary action は、コントローラーの指示レイが DOM オーバーレイと交差する 位置に DOM ポインターイベントとクリックイベントを配送します。

新しい beforexrselect イベントは、 DOM オーバーレイの特定領域に対する XR 入力イベントを抑制する方法を提供し、 アプリケーションが DOM UI インタラクションと XR ワールドインタラクションを区別するのを助けます。

2. HTML API 統合

このモジュールは、GlobalEventHandlers の定義に新しいイベント型を追加します。

2.1. onbeforexrselect

型が beforexrselect である XRSessionEvent は、入力ソースの targetRaySpace の -Z 軸が、入力デバイスの primary action が トリガーされた時点で DOM オーバーレイ要素と交差する場合、WebXR selectstart 入力イベントを生成する前に、DOM オーバーレイ要素上で配送されます。

partial interface mixin GlobalEventHandlers {
  attribute EventHandler onbeforexrselect;
};

このイベントは、型が beforexrselect である XRSessionEvent で、バブルし、キャンセル可能で、composed です。その target 要素は、targetRaySpace によって交差されている最上位イベントターゲットであり、DOM オーバーレイ要素の子孫または DOM オーバーレイ要素自体のいずれかです。

preventDefault() を呼び出してこのイベントをキャンセルすると、この primary action に対して入力ソースが通常生成する既定の WebXR 入力イベントが抑制されます。selectstartselectend、 および select イベントは、この インタラクションシーケンスに対して発火されません。

注: 将来の WebXR モジュールは、 このイベントのキャンセルによって影響を受ける追加のイベントまたは WebXR 入力依存データを定義する可能性があります。 たとえば、一時的な入力ソースのヒットテスト購読からの結果を抑制する場合などです。

このイベントおよびイベントハンドラーによって取られる処理は、DOM イベント処理に影響を与えず、 DOM イベント配送とも同期されません。ユーザーのアクションは別途、`"pointerdown"` などの 適切な DOM イベントを生成し、それらの DOM イベントは対応する beforexrselect イベントの前または後に発生し得ます。これは、 beforexrselect イベントがキャンセルされたかどうかに関係なく発生し、 XR 入力イベントハンドラーで実行される以後の処理とは独立しています。

注: このイベントは、ユーザーが DOM UI と インタラクションしている間に、アプリケーションが重複する XR 入力イベントを抑制する方法を提供します。これはバブルする イベントであるため、アプリケーションは適切なコンテナー要素にハンドラーを登録し、DOM オーバーレイの領域を XR 入力をブロックするものとして実質的にマークできます。これは DOM 要素の視覚的不透明度とは独立しています。 XR 入力イベントをブロックしない、テキスト説明などの非インタラクティブな不透明または半透明 DOM コンテンツを 表示することも可能です。

次のコードは、DOM オーバーレイの インタラクティブな部分にイベントハンドラーをインストールし、その領域に対する XR イベントを選択的に抑制する一方で、 インタラクション目的では透明として扱われる DOM オーバーレイの他の部分に対しては XR イベントの生成を継続します。
document.getElementById('button-container').addEventListener(
  'beforexrselect', ev => ev.preventDefault());

2.2. CSS 擬似クラス

:xr-overlay 擬似クラスは、 DOM Overlay を使用する没入型セッションの間、overlay element に一致しなければなりません。

overlay element は、backdrop root です。

注: DOM オーバーレイ要素またはその子孫に対する バックドロップフィルター効果は、AR カメラ画像(該当する場合)または没入型セッションの XRWebGLLayer に描画されるレンダリング済みコンテンツを変更しません。

オーバーレイ要素の祖先に対するスタッキングコンテキストがある場合、それらは没入型セッションの ディスプレイには描画されません。

注: overlay element 自体は、 `position: fixed` スタイルにより スタッキング コンテキストです。

注: マルチディスプレイシステムでは、UA は デスクトップモニターなどの別個のディスプレイ上に、オーバーレイ要素の祖先または兄弟ツリーの スタッキングコンテキストを描画してもよいです。

2.3. ユーザーエージェントレベルのスタイルシート既定値

overlay element に対するユーザーエージェントスタイルシート既定値は次のとおりです:

:xr-overlay {
    /* 透明な背景を強制する */
    background: rgba(0,0,0,0) !important;

    /* 子孫の包含ブロックとして機能する */
    contain: paint !important;

    /* 次のスタイル指定は :fullscreen と同一 */
    position: fixed !important;
    top: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    left: 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;

    /* 意図的に !important ではない */
    object-fit: contain;
}

注: これは Fullscreen API § 5.2 ユーザーエージェントレベルのスタイルシート既定値に基づくものであり、 オーバーレイ要素の背景を透明にする追加のスタイル指定を含みます。:xr-overlay のスタイル指定は、Fullscreen API の擬似クラスまたはスタイル指定に明示的には依存しないため、 ユーザーエージェントは Fullscreen API とは独立してこれを実装する柔軟性を持ちます。

注: Fullscreen API は現在、 `contain: paint` 規則を指定していませんが、これは典型的な UA の挙動と一致しており、 その仕様の将来の改訂で追加される予定です。

注: アプリケーションは、セッション中に UI 要素を条件付きでスタイル指定するために、インターフェイス要素の可視性の制御を含めて、:xr-overlay 擬似クラスを使用することが推奨されます。

2.4. Fullscreen API 統合

UA は DOM Overlay を [FULLSCREEN] API の特殊な場合として実装してもよいです。この場合、UA は 没入型セッションの間、アクティブな fullscreen 要素への変更を防止し、requestFullscreen 要求を拒否しなければなりません。

注: DOM Overlay API は、 セッション開始時にオーバーレイ要素を指定することを要求し、セッション中にアクティブなオーバーレイ要素を変更する 仕組みを提供しません。Fullscreen API を使用してアクティブなオーバーレイ要素を間接的に変更できる場合、 アプリケーションはプラットフォーム間で一貫性のない挙動になります。

DOM Overlay が Fullscreen API を通じて実装される場合、root 要素のスタッキングコンテキストは、没入型ディスプレイには描画されません。没入型ディスプレイに描画されるのは、 top layer 内の要素のスタッキングコンテキストのみであり、そこには overlay element も含まれます。

注: 既定では、fullscreen モードは不透明な黒の バックドロップを使用します。変更された描画規則により、このバックドロップを描画する必要がなくなり、 オーバーレイ要素の祖先または兄弟ツリーが透明なオーバーレイ要素を通して見えないようになります。

注: Fullscreen API に基づく実装を許可することは、主に、没入型セッション中にページの残りの部分が見えない 単一ディスプレイシステムを意図しています。マルチディスプレイシステムでは、技術的には、 デスクトップモニターなどの別個のディスプレイにページの残りの部分を表示しながら、オーバーレイ要素に Fullscreen API を 使用することができ、その場合 UA は、オーバーレイ要素の祖先または兄弟ツリーのスタッキングコンテキストを その別個のディスプレイ上に描画してもよいです。

あるいは、UA は [FULLSCREEN] API とは独立して DOM Overlay を実装してもよいです。この場合、overlay element は なお :xr-overlay 擬似クラスに一致しなければならず、この擬似クラスに対する § 2.3 ユーザーエージェントレベルのスタイルシート既定値を使用して 没入型ビュー内でスタイル指定されなければなりません。UA は、overlay element の外側にある要素に対して fullscreen API を使用することを 別途サポートしてもよいですが、これは DOM オーバーレイコンテンツの表示方法にいかなる影響も与えてはなりません。

注: DOM Overlay と Fullscreen API を 独立して処理することは、接続された VR ヘッドセットを持つデスクトップ PC などのマルチディスプレイシステムを サポートすることを意図しています。この場合、Fullscreen API は 2D モニター上のページコンテンツを制御するために 使用できます。たとえば、三人称レンダリングビューを持つ fullscreen canvas 要素を表示しながら、 DOM オーバーレイ要素と没入型コンテンツをヘッドセット内に別個に表示できます。

没入型セッションが、元々表示されていた Web ページとは別の出力デバイスを使用するマルチディスプレイシステムでは、 overlay element は、没入型ビューに表示されている間、 2D Web ページの一部として他のディスプレイ上で可視またはインタラクティブであってはなりません。UA は、 セッションの間、他のディスプレイ上のページ全体を非表示または無効化することを選択してもよいです。

注: DOM オーバーレイコンテンツを、 非インタラクティブなヘッドセットミラービューまたは同様の非 Web ページ UI の一部として表示することは問題ありません。 このマルチディスプレイ制限の意図は、オーバーレイ要素が同時に 2 か所に表示される場合に、 その表示の不整合や潜在的に混乱を招くインタラクションを避けることです。また、DOM 要素を 2 つの別々の ディスプレイに同時に表示することに関する実装上の課題も回避します。

3. WebXR Device API 統合

このモジュールは、XRSessionInit および XRSession の定義を拡張し、XRInputSource イベントの挙動を変更します。

3.1. XRSessionInit

このモジュールは、文字列 dom-overlay を、 immersive sessions 用の requiredFeatures または optionalFeatures シーケンスで使用する新しい有効なfeature descriptorとして導入します。

デバイスは、没入型セッションの間、ユーザーが DOM コンテンツを見てインタラクションする方法を 提供する場合、DOM オーバーレイ機能をcapable of supportingします。

注: 実装上の選択肢には、 ハンドヘルド AR デバイス上の fullscreen オーバーレイ、または VR もしくは AR ヘッドセット向けの 空間内の浮遊矩形が含まれます。

DOM コンテンツは、最上位のコンテンツレイヤーであるかのように合成されなければなりません。これは XRWebGLLayer からのコンテンツ、または AR デバイスのパススルーカメラからの画像によって遮蔽されてはなりません。 アプリケーションは通常の CSS 規則を使用して、DOM オーバーレイ自体の内部におけるコンテンツの透明度と 2D 配置を制御できます。

DOM オーバーレイは、セッションの開始時からユーザーに自動的に可視でなければならず、 それを可視にするためにユーザーがボタンを押したり他の手動操作を行ったりする必要があってはなりません。

注: コンテンツ要素が間接的にしか見えない場合、 たとえば、セッション中に通常見えない別個の 2D モニター上のコンテンツを見るために、ユーザーが ヘッドセットを外したり、パススルーカメラを手動で有効にしたりする必要がある場合、デバイスは DOM オーバーレイを サポートすると主張すべきではありません。ただし、ユーザーが DOM オーバーレイコンテンツを表示する物理的な タッチスクリーンデバイスを携帯している没入型 CAVE システムは、有効な実装です。

XRSessionInit 辞書は、新しい domOverlay メンバーを追加することによって拡張されます。これは XRSessionInit の任意メンバーですが、既定のオーバーレイ要素が存在しないため、DOM オーバーレイ機能を使用する場合は 指定しなければなりません。

partial dictionary XRSessionInit {
  XRDOMOverlayInit? domOverlay;
};

DOM オーバーレイ機能が必須機能であるにもかかわらず、アプリケーションが domOverlay メンバーを供給しなかった場合、UA はこれを未解決の必須機能として扱い、requestSession() promise を NotSupportedError で拒否しなければなりません。任意機能として要求された場合、UA は機能要求を無視し、DOM オーバーレイを有効にしてはなりません。

注: UA は、DOM オーバーレイが有効にならなかった理由を説明する 開発者コンソールメッセージなどのローカル警告を出してもよいです。

3.2. XRSession

このモジュールは XRSession インターフェイスを拡張し、DOM オーバーレイ機能の現在の状態を反映する 新しい読み取り専用属性を追加します。

partial interface XRSession {
  readonly attribute XRDOMOverlayState? domOverlayState;
};

domOverlayState 属性は、dom-overlay 機能がサポートされていない、または有効になっていない場合、null でなければなりません。

この機能が有効である場合、属性値は存在しなければなりません。

注: アプリケーションは、domOverlayState の存在を確認することで、たとえば任意機能として要求した場合に、DOM オーバーレイ機能が有効で動作していることを 検証できます。

注: DOM オーバーレイは、 たとえばユーザーエージェントが固定された向きまたは位置に配置し、ユーザーの移動後にそれがユーザーの視野外に 出てしまう場合など、一時的にユーザーから見えなくなることがあります。この間も domOverlayState 属性は設定されたままです。

セッションが可視の DOM オーバーレイとともにアクティブである間、UA はこれを rendering opportunity として扱い、DOM コンテンツのアニメーションに適した速度で WindowrequestAnimationFrame() コールバックを実行しなければなりません。これらは、requestAnimationFrame() コールバックが XRWebGLLayer コンテンツの描画に使用される場合とは異なる時刻および頻度で実行されてもよいです。

3.3. XRInputSource

XRInputSource が、その primary action に対応するプラットフォーム固有のアクションを開始するとき、 UA は、このアクションが primary action として扱われるかどうかを決定するために、入力処理を開始する前に次の手順を 実行しなければなりません:

  1. 入力ソースの targetRaySpace が、入力デバイスの primary action がトリガーされた時点で DOM オーバーレイと交差する場合:

    1. タスクをキューに入れXRSessionEvent を使用して beforexrselect という名前のイベントを発火します。これは、 targetRaySpace によって交差されている、DOM オーバーレイ root 内の最上位イベントターゲット上で行い、target をその要素に設定します。このイベントはバブルし、キャンセル可能で、composed です。

    2. XR 入力をどのように扱うべきかを次のように確認します:

      イベントがキャンセルされた場合
      1. 入力ソースが transient input source である場合、これを auxiliary action として扱います。そうでない場合、XR 入力イベントを生成する目的では このアクションを無視します。

      それ以外の場合
      入力ソースに対して通常どおり、そのアクションを primary action として扱います。

注: 実質的に、beforexrselect イベントをキャンセルすると XR 入力 select イベントが抑制され、このアクションに対して selectstartselectend、 または select のいずれも生成されません。一時的な 入力ソースについては、inputsourceschange イベントは引き続き生成されますが、beforexrselect イベントをキャンセルすると、そのアクションは二次的な指入力と同様に auxiliary action として扱われます。

4. 初期化

アプリケーションは、domOverlay 辞書を通じて DOM オーバーレイの構成を提供しなければなりません。

dictionary XRDOMOverlayInit {
  required Element root;
};

root 属性は、DOM オーバーレイの内容としてユーザーに表示される overlay element を指定します。これは必須属性であり、 既定値はありません。

次のコードは、DOM オーバーレイを任意機能として要求します。
let uiElement = document.getElementById('ui');
navigator.xr.requestSession('immersive-ar', {
    optionalFeatures: ['dom-overlay'],
    domOverlay: { root: uiElement } }).then((session) => {
    // session.domOverlayState.type is now set if supported,
    // or is null if the feature is not supported.
  }
}

アクティブな間、DOM オーバーレイ要素は、UA が提供する DOM オーバーレイ矩形の寸法を満たすように 自動的にリサイズされます。その背景色は、セッションの間、自動的に透明としてスタイル指定されます。

注: UA は、DOM オーバーレイ要素をスタイル指定するために Fullscreen API § 5.2 ユーザーエージェントレベルのスタイルシート既定値を使用し、背景を透明に設定するために background-color: rgba(0,0,0,0) !important; を含む追加規則を加えてもよいです。

セッションがアクティブになると、domOverlayState 属性は DOM オーバーレイに関する情報を提供します。

enum XRDOMOverlayType {
  "screen",
  "floating",
  "head-locked"
};

dictionary XRDOMOverlayState {
  XRDOMOverlayType type; 
};

ユーザーエージェントは、DOM オーバーレイがどのように表示されているかを示すように type を設定しなければなりません。その値は、セッションの間、変更されないままでなければなりません。

注: ユーザーの視点からは、"floating" オーバーレイは現実世界の位置に固定されているかのようにレンダリングされると静止しているように知覚され、 このスタイルは VR におけるインタラクティブ表示面として一般的な選択です。"head-locked" オーバーレイは 頭部回転に合わせて動き、固定された現実世界の位置を持ちません。

注: この仕様の将来のバージョンでは、 たとえば浮遊オーバーレイのワールド空間内の現在位置など、オーバーレイ状態に追加の属性が加えられる可能性があります。

5. クロスオリジンコンテンツに対するイベント処理

ユーザーエージェントは、DOM オーバーレイ要素内に入れ子にされた HTMLIFrameElement などのクロスオリジンコンテンツとのユーザーインタラクションに対して、ポーズまたは gamepad 入力状態を 提供してはなりません。

ユーザーエージェントは、たとえば通常そのコンテンツによって受信される DOM イベントをブロックすることにより、 またはクロスオリジンコンテンツをまったく読み込まず表示しないことにより、 クロスオリジンコンテンツとのユーザーインタラクションを防止して、この要件を満たしてもよいです。

ユーザーエージェントが DOM オーバーレイ内のクロスオリジンコンテンツとのインタラクションをサポートし、 かつ入力ソースの targetRaySpace最上位 イベントターゲットとしてクロスオリジンコンテンツと交差する場合、UA は WebXR Device API § 13.4.3 Limiting データ調整を有効にし、その入力ソースに関連付けられた XRSpace に対して、limit boolean を true として扱ってpopulate the pose しなければなりません。さらに、ポーズが制限されている間、UA はこの入力ソースの gamepad データを 更新してはなりません。

注: この方法でポーズが制限されている間、 アプリケーションはコントローラーまたはそのターゲティングレイのポーズ更新を受け取りません。UA は、 インタラクションを可能にするために必要に応じて、ポインターレイまたはその他の適切な視覚化を描画する責任を負います。

注: gamepad データの更新を制限することは、 クロスオリジンコンテンツとのインタラクションからアプリケーションへの情報漏えいを避けることを意図しています。 たとえば、入力ソースの primary action が、あるトリガーしきい値で primary action が発生するアナログトリガーを使用する場合、対応するイベントがブロックされていても、 アプリケーションはトリガー値から、ユーザーが primary action を開始および終了した時点を推測できます。 別の例として、DOM コンテンツでのテキスト入力にトラックパッドまたはジョイスティックを使用するデバイスでは、 軸値を読み取ることで、アプリケーションが入力されているテキストを推測できる場合があります。

primary action がクロスオリジンコンテンツ内で終了する場合、UA は primary action をキャンセルされたものとして扱い、select イベントを送信してはなりません。UA は、 ポーズを制限されたものとして扱うことにより、クロスオリジンコンテンツに入る前の最後に利用可能だったポーズを使用して selectend イベントを送信しなければなりません。

入力が transient input source であり、かつ transient action がクロスオリジンコンテンツ内で開始する場合、ユーザーエージェントは、 入力位置がクロスオリジンコンテンツの外に移動するまで、adding the input source を 遅延しなければなりません。transient action がまだクロスオリジンコンテンツ内にある間に 終了する場合、一時的な入力ソースはまったく追加されません。

注: screen モードの 入力を使用するハンドヘルド AR デバイスでは、これは、クロスオリジンコンテンツ内に留まるタッチが入力ソースまたは 関連する XR 入力イベントを作成しないことを意味します。ドラッグ移動がクロスオリジンコンテンツ内で開始する場合、 入力ソースは、タッチ位置がクロスオリジンコンテンツから離れた位置で作成され、通常どおりキャンセル可能な beforexrselect イベントを発行します。

6. セキュリティ、プライバシー、および快適性に関する考慮事項

6.1. 保護された機能

DOM オーバーレイ自体は、新しい機微情報を導入しません。しかし、既存の技術を組み合わせるため、 この組み合わせが予期しないインタラクションにつながらないようにすることが重要です。

このモジュールの主要な設計目標は、DOM オーバーレイが可能な限り 2D コンテンツの既存のセマンティクスに従うことでした。 具体的には、クロスオリジン埋め込みコンテンツに関連する情報フローは、2D ページ上で iframe を使用する場合と 類似しているべきです。たとえば、2D ページはクロスオリジンコンテンツを iframe に埋め込み、その iframe を 透明な要素で覆うことができます。その場合、ページは引き続きマウス移動情報を受け取りますが、 クロスオリジンコンテンツは覆われた領域内の入力イベントを受け取りません。DOM オーバーレイでは、 XR 入力イベントデータはマウス移動データと同様に扱われます。クロスオリジンコンテンツが存在しない場合、 またはクロスオリジンコンテンツが入力を受信していない場合、ポーズは外側のページで引き続き利用可能ですが、 クロスオリジンコンテンツとインタラクションしているときは制限(ブロック)されます。

クロスオリジンコンテンツは、クリックジャッキング脅威に対して潜在的に脆弱です。UA は、 iframe が DOM オーバーレイで使用される場合、Content Security Policy 3 § 6.1.5 frame-src などの緩和策を引き続き適用しなければなりません。UA は、特定の脅威に対処するために必要であれば、 DOM オーバーレイ内のクロスオリジンコンテンツに特化した追加の制限を実装してもよいです。

変更点

2021年8月31日の最初の公開作業草案からの変更点

7. 謝辞

次の個人が WebXR DOM Overlay 仕様の設計に貢献しました:

適合性

文書の 慣例

適合性要件は、記述的な表明と RFC 2119 の用語の組み合わせによって表現されます。 この文書の規範的部分におけるキーワード “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, および “OPTIONAL” は、RFC 2119 で説明されているように解釈されるものとします。 ただし、読みやすさのため、 この仕様ではこれらの語がすべて大文字で現れるとは限りません。

この仕様のすべてのテキストは、 明示的に非規範的とマークされた節、例、および注を除き、規範的です。 [RFC2119]

この仕様における例は、“for example” という語で導入されるか、 または次のように、 class="example" によって規範的テキストから分離されます:

これは参考例の一例です。

参考注は “Note” という語で始まり、 次のように、 class="note" によって規範的テキストから分離されます:

注、これは参考注です。

適合 アルゴリズム

アルゴリズムの一部として命令形で表現される要件 (たとえば "strip any leading space characters" または "return false and abort these steps" など)は、 そのアルゴリズムを導入する際に使用されたキーワード ("must", "should", "may" など) の意味で解釈されるものとします。

アルゴリズムまたは特定の手順として表現される適合性要件は、 最終結果が等価である限り、 どのような方法でも実装できます。 特に、この仕様で定義されるアルゴリズムは 理解しやすいことを意図したものであり、 性能が高いことを意図したものではありません。 実装者には最適化が推奨されます。

索引

この仕様で定義される用語

参照により定義される用語

参考文献

規範的参考文献

[CSP3]
Mike West; Antonio Sartori. Content Security Policy Level 3. 2024年9月9日. WD. URL: https://www.w3.org/TR/CSP3/
[CSS-POSITION-4]
CSS Positioned Layout Module Level 4. 編集者草案. URL: https://drafts.csswg.org/css-position-4/
[CSS21]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS21/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[FILTER-EFFECTS-2]
Filter Effects Module Level 2. 編集者 草案. URL: https://drafts.fxtf.org/filter-effects-2/
[FULLSCREEN]
Philip Jägenstedt. Fullscreen API Standard. Living Standard. URL: https://fullscreen.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. 2022年11月11日. WD. URL: https://www.w3.org/TR/selectors-4/
[UIEVENTS]
Gary Kacmarcik; Travis Leithead. UI Events. 2024年9月7日. WD. URL: https://www.w3.org/TR/uievents/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/
[WEBXR]
Brandon Jones; Manish Goregaokar; Rik Cabanier. WebXR Device API. 2024年8月21日. CR. URL: https://www.w3.org/TR/webxr/
[WEBXR-DOM-OVERLAYS-1]
Piotr Bialecki. WebXR DOM Overlays Module. 2022年11月17日. WD. URL: https://www.w3.org/TR/webxr-dom-overlays-1/

IDL 索引

partial interface mixin GlobalEventHandlers {
  attribute EventHandler onbeforexrselect;
};

partial dictionary XRSessionInit {
  XRDOMOverlayInit? domOverlay;
};

partial interface XRSession {
  readonly attribute XRDOMOverlayState? domOverlayState;
};

dictionary XRDOMOverlayInit {
  required Element root;
};

enum XRDOMOverlayType {
  "screen",
  "floating",
  "head-locked"
};

dictionary XRDOMOverlayState {
  XRDOMOverlayType type; 
};

MDN

Element/beforexrselect_event

In only one current engine.

FirefoxNoneSafariNoneChrome83+
Opera?Edge83+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
MDN

XRSession/domOverlayState

In only one current engine.

FirefoxNoneSafariNoneChrome83+
Opera?Edge83+
Edge (Legacy)?IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebViewNoneSamsung Internet?Opera Mobile?