Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
Screen Orientation 仕様は、デバイスの画面の向きの種類と角度を標準化し、 そのロックおよびロック解除の手段を提供する。この仕様で定義される API は、デバイスの画面の向きの現在の種類と角度を公開し、変更時にイベントを ディスパッチする。これにより、CSS と連携しながら、複数の画面の向きに対して Web アプリケーションがプログラム的にユーザー体験を適応できる。この API は、 ユーザーがデバイスを物理的に回転させても、画面の向き自体は変更させたくない コンピューターゲームなどのアプリケーションに特に有用である。API は、特定の ロック前条件 が満たされている場合にのみ、 画面の向きのロックを許可する。
このセクションは、本書が公開された時点でのステータスを説明します。現在の W3C の出版物一覧や、この技術レポートの最新版は、 W3C 標準および草案一覧 で確認できます。
本書は作業中の文書です。
本書は Web Applications Working Group によって、 勧告プロセス を用いて ワーキングドラフトとして公開されました。
ワーキングドラフトとしての公開は、W3C およびその会員による支持を意味するものではありません。
本書はドラフト文書であり、今後いつでも他の文書によって更新、差し替え、または廃止される可能性があります。進行中の作業以外のものとして本書を引用することは適切ではありません。
本書は W3C 特許ポリシーのもとで活動するグループによって作成されました。 W3C は、 グループの成果物に関連して提出された特許開示の公開リスト を管理しています。そのページには特許の開示方法も記載されています。ある者が必須特許請求項を含むと信じる特許を実際に知っている場合、 必須請求項 を含むと信じる場合は、 W3C特許ポリシー第6節 に従ってその情報を開示しなければなりません。
本書は 2025年8月18日 W3C プロセス文書 に従って管理されています。
このセクションは規範的ではありません。
この例では、「Lock」ボタンを選択するとフルスクリーンへの移行を要求し、その後、画面を反対の向きにロックします。 「Unlock」ボタンを選択すると画面のロックが解除されます。
<script>
function updateLockButton() {
const lockButton = document.getElementById("button");
const newOrientation = getOppositeOrientation();
lockButton.textContent = `Lock to ${newOrientation}`;
}
function getOppositeOrientation() {
return screen
.orientation
.type
.startsWith("portrait") ? "landscape" : "portrait";
}
async function rotate(lockButton) {
if (!document.fullscreenElement) {
await document.documentElement.requestFullscreen();
}
const newOrientation = getOppositeOrientation();
await screen.orientation.lock(newOrientation);
updateLockButton(lockButton);
}
screen.orientation.addEventListener("change", updateLockButton);
window.addEventListener("load", updateLockButton);
</script>
<button onclick="rotate(this)" id="button">
ロックする...
</button>
<button onclick="screen.orientation.unlock()">
アンロック
</button>
画面の向きをロックするとは、OrientationLockType orientation
に対して、ユーザーが画面を特定の
画面の向き
にしか回転できないようにすることを意味します。他の向きへの回転が制限される場合もあります。画面を回転できる向きは、ユーザーエージェント、ユーザーの設定、オペレーティングシステムの慣例、または画面自体によって決まります。例えば、
横向き にロックすると、ユーザーは画面を
横向き(主) やシステムが許せば
横向き(副) に回転できますが、
縦向き(副) には向きません。
画面の向きをアンロックするとは、エンドユーザーが、システムが許す任意の 画面の向き に自由に画面を回転できるようにすることを意味します。
画面は、以下のいずれかの 画面の向き であるか、ロック されることがあります。
nullである場合)のデバイスのデフォルト挙動です。この向きは、デバイスのオペレーティングシステムやユーザーエージェント、エンドユーザー、あるいは
インストールされたウェブアプリケーション
によって決定されることがあります。例えば、画面の向きがアンロックされていてユーザーがデバイスを回転させた場合、一部のデバイスでは向きの変更が
portrait-primary、
landscape-primary、
landscape-secondary
のみ許可され、portrait-secondary にはならない場合があります。
出力デバイスの画面には、次の概念が関連付けられています:
OrientationLockTypeとして表される)、またはアンロック時はnull。
OrientationTypeとして表される)。
下記の画面の向き値リストは、異なる自然な向きを持つ画面における各画面の向きタイプに関連付けられる角度を標準化します:
Document インターフェイスは、次の内部スロットで拡張されます:
| 内部スロット | 説明 |
|---|---|
| [[orientationPendingPromise]] |
null または Promise のいずれかです。 Promise
が割り当てられている場合、そのプロミスは画面の向きをロックするリクエストを表します。
|
WebIDLpartial interface Screen {
[SameObject] readonly attribute ScreenOrientation orientation;
};
Window オブジェクトには、関連付けられた
ScreenOrientationがあり、これは Screen の orientation オブジェクト(すなわち
ScreenOrientation
インスタンス、window.screen.orientation)です。
WebIDL[Exposed=Window]
interface ScreenOrientation : EventTarget {
Promise<undefined> lock(OrientationLockType orientation);
undefined unlock();
readonly attribute OrientationType type;
readonly attribute unsigned short angle;
attribute EventHandler onchange;
};
| 内部スロット | 説明 |
|---|---|
| [[angle]] |
画面の最後に認識された現在の向きの角度(度単位)を、
unsigned short として
画面の向き値リストから導出して表します。
|
| [[initialType]] | 現在の向きタイプを、閲覧コンテキストが作成された時点での値として表します。 |
| [[type]] |
画面の最後に認識された現在の向きタイプを
OrientationType
列挙値として表します。
|
ロック前条件 は、画面の向きのロックを許可する前に ユーザーエージェント が MAY 課すことができる任意の要件である。 一般的なロック前条件には、ドキュメントがフルスクリーンモードであること、またはインストール済みのウェブアプリケーションの一部であることなどが含まれる。具体例は 10. Web Application Manifest との相互作用 および 9. Fullscreen API との相互作用 を参照。
lock() メソッドが
OrientationLockType
orientation を指定して呼び出されたとき、ユーザーエージェント
は
MUST 次の手順を実行する。
Document とする。
NotSupportedError"
DOMException)を返し、これらの手順を中止する。
NotAllowedError"
DOMException で
拒否されたプロミス を返し、これらの手順を中止する。
[[orientationPendingPromise]] が
null でない場合、現在のロックのプロミスを拒否して無効化する(
document に対して "AbortError" で)。
[[orientationPendingPromise]] を
新しいプロミス に設定する。
[[orientationPendingPromise]] を返す。
unlock() メソッドが呼び出されたとき、ユーザーエージェントは MUST
次の手順を実行しなければなりません:
Document を代入します。
null の場合、
undefined を返します。
[[orientationPendingPromise]] が
null でない場合、現在のロックプロミスを却下しnullにする を
document で "AbortError" で実行します。
null と document で実行します。
unlock() は Promise
を返しません。なぜなら、これは
デフォルトの画面の向き にロックすることと同義ですが、
ユーザーエージェント がその向きを知っている場合と知らない場合があるためです。そのため、ユーザーエージェント は新たな向きがどうなるか、あるいは実際に変化するかどうかすら予測できません。
共通安全性チェックは、Document
document に対して次の手順を実行します。
InvalidStateError"
DOMException。
SecurityError" DOMException。
SecurityError" DOMException。
取得時、angle 属性は
this の
[[angle]] を返します。
onchange 属性は、イベントハンドラIDL属性です。
onchange イベントハンドラに対応し、
そのイベントハンドラのイベント型は
change です。
WebIDLenum OrientationLockType {
"any",
"natural",
"landscape",
"portrait",
"portrait-primary",
"portrait-secondary",
"landscape-primary",
"landscape-secondary"
};
OrientationLockType 列挙型は、画面が潜在的に ロック され得る画面の向きを表します。
any」は any を表します。
natural」は natural を表します。
landscape」は landscape を表します。
portrait」は portrait を表します。
portrait-primary」は portrait-primary を表します。
portrait-secondary」は portrait-secondary を表します。
landscape-primary」は landscape-primary を表します。
landscape-secondary」は
landscape-secondary を表します。
WebIDLenum OrientationType {
"portrait-primary",
"portrait-secondary",
"landscape-primary",
"landscape-secondary"
};
OrientationType 列挙値は、画面の現在の向きの種類を表すために使用されます。
portrait-primary" は portrait-primary を表します。
portrait-secondary" は portrait-secondary
を表します。
landscape-primary" は landscape-primary を表します。
landscape-secondary" は
landscape-secondary を表します。
閲覧コンテキスト context が作成されるとき、ユーザーエージェントは MUST 以下を実行しなければなりません:
ScreenOrientation にします。
[[initialType]] 内部スロットを、画面の 現在の向きの種類 に初期化します。
[[type]] 内部スロットを、画面の 現在の向きの種類 に初期化します。
[[angle]] 内部スロットを、画面の 現在の向きの角度 に初期化します。
手順で、現在のロックプロミスを却下しnullにすることが Document document と DOMString
exceptionName で要求された場合、ユーザーエージェントは MUST 以下を実行しなければなりません:
[[orientationPendingPromise]] は
null でないこと。
[[orientationPendingPromise]]
を代入します。
DOMException で拒否します。
[[orientationPendingPromise]] を
null に設定します。
手順で 向きロックを適用することが
OrientationLockType?
orientation と Document document
に対して要求された場合、
ユーザーエージェントは MUST
以下の手順を実行しなければなりません:
[[orientationPendingPromise]] が
null でない場合は、現在のロックのプロミスを拒否して無効化する(document
に "AbortError" を指定)。
[[orientationPendingPromise]]
が null であれば、スキップする。
AbortError" を指定)。
[[orientationPendingPromise]]
が
null でなければ、現在のロックのプロミスを拒否して無効化する(document
に "AbortError"
を指定)、これ以降の手順を中止する。
null なら、画面の向きをロック解除する。
null に設定する。
[[orientationPendingPromise]]
が null でなければ、
現在のロックのプロミスを拒否して無効化する(document
に "NotSupportedError"
を指定)。
これは、ユーザーがスクリーンの向き変更をウェブアプリケーションから防ぐように設定している場合や、 ユーザーエージェントではなくプラットフォーム自体が指定した向きへの画面ロックを許可しない場合に発生します。 ユーザー設定や端末機能による違いがロック失敗の傾向に現れるため、フィンガープリンティングに利用される可能性がある点にも注意が必要です。
[[orientationPendingPromise]]
とする。
[[orientationPendingPromise]]
を
null に設定する。
null でなければ、
resolve で promise
を
undefined で解決する。
ユーザーエージェントが トップレベル・トラバーサブル の画面の向きが変更されたと判断した場合や、ユーザーが トップレベル閲覧コンテキスト を別の画面に移動した場合は、画面の向き変更ステップを トップレベル・トラバーサブル の アクティブなドキュメント に対して実行する。
画面の向き変更ステップ(
Document document 用)は以下の通り:
ScreenOrientation とする。
[[type]] に等しく、かつ angle が
screenOrientation の [[angle]] に等しい場合、これらの手順を中止する。
[[angle]] を
angle に設定する。
[[type]]
を
type に設定する。
[HTML] の「可視状態を更新する」アルゴリズムは、画面の向き変更手順を実行します。
アンロードドキュメントクリーンアップ手順 が document で実行されるとき、ユーザーエージェントは MUST 次の手順を実行しなければなりません:
画面の向きを完全にアンロックする手順
は、Document document に対して次の通りです:
[[orientationPendingPromise]] が
null でなければ、
現在のロックのプロミスを拒否して無効化する(document に "AbortError")。
null を
topDocument に適用する。
ユーザーエージェントは MUST、lock() の利用を
シンプルなフルスクリーンドキュメントにのみ制限する ロック前条件 を課さなければならない。
この要件は、画面の向きロック権限に関するユーザーエージェントの挙動の違いによるフィンガープリンティングを防ぐためである。[fullscreen]
document がフルスクリーンを終了する際は、画面の向きを完全にロック解除する手順も実行される。[fullscreen]
Web Application Manifest 仕様は、ウェブアプリケーションが デフォルトの画面の向き を orientation メンバーで設定できるようにします。
ユーザーエージェントは SHOULD、インストール済みウェブアプリケーション が「fullscreen」display mode で表示されることをロック前条件として要求するべきです。
車椅子のアーム等にデバイスが固定された向きで設置されているユーザーがいる可能性があるため、画面の向きをロックする際にユーザーがデバイスを回転させることを前提とする開発者は、Web コンテンツアクセシビリティ ガイドライン (WCAG) 2.1 の Orientation 成功基準 を認識しておく必要があります。該当の基準は、コンテンツと機能が 画面の向き にかかわらず利用可能であることを 必須 としています。特定の向きが 重要 である場合、ウェブアプリケーションはユーザーに向きの要件を通知しなければなりません。
画面のタイプと 角度は、フィンガープリンティングの潜在的な手段となり得ます。以下の緩和策は、端末の保持方法を明かさずユーザーのプライバシーを保護するとともに、 セカンダリの向きタイプや関連する角度がフィンガープリンティングに利用されることも防ぎます。
ユーザーのプライバシー保護のため、向き変更イベントの配信にはいくつかの制限が課されます:
document が ユーザーの注目を受けているトップレベル・トラバーサブルの完全にアクティブな子孫 であることが求められるのは、 向きイベントがシステムレベルで表示され、ユーザーの注目やキーボード入力などを受けられるウィンドウのドキュメントのみがイベントを受けることを保証するためです。 追加の可視性状態チェックは多層防御となります。これらの制限により、バックグラウンドタブ、隠れウィンドウ、最小化アプリケーションがフィンガープリンティング目的で向きデータを取得できなくなります。
フィンガープリンティングに対抗するために、ユーザーエージェントは特にプライバシー重視の環境(例えばプライベートブラウズモードなど)では、以下の保護策を SHOULD 実装すべきです:
[[initialType]] であるかのように動作する。
type ゲッターで返す値は
"portrait-primary" または
"landscape-primary"
に制限される。画面のアスペクト比によってどちらが返されるかが決まる。
[[initialType]] と一致する場合は、
angle ゲッターは 0
を返し、それ以外の場合は 90 を返す。
非規範と明記されたセクションに加えて、この仕様書中のすべての著作ガイドライン、図、例、および注記は非規範です。それ以外の内容はすべて規範となります。
この文書中のキーワード MAY、MUST、および SHOULD は、 BCP 14 [RFC2119] [RFC8174] に記載されている通り、ここに示すようにすべて大文字で出現した場合に限り、その意味で解釈されます。
WebIDLpartial interface Screen {
[SameObject] readonly attribute ScreenOrientation orientation;
};
[Exposed=Window]
interface ScreenOrientation : EventTarget {
Promise<undefined> lock(OrientationLockType orientation);
undefined unlock();
readonly attribute OrientationType type;
readonly attribute unsigned short angle;
attribute EventHandler onchange;
};
enum OrientationLockType {
"any",
"natural",
"landscape",
"portrait",
"portrait-primary",
"portrait-secondary",
"landscape-primary",
"landscape-secondary"
};
enum OrientationType {
"portrait-primary",
"portrait-secondary",
"landscape-primary",
"landscape-secondary"
};
angle
属性(ScreenOrientation 用)
§5.
[[angle]]
内部スロット(ScreenOrientation 用)
§5.1
"any"
(OrientationLockType の列挙値)
§6.
ScreenOrientation
§4.
[[initialType]]
内部スロット(ScreenOrientation 用)
§5.1
"landscape"
(OrientationLockType の列挙値)
§6.
lock
メソッド(ScreenOrientation 用)
§5.
"natural"
(OrientationLockType の列挙値)
§6.
onchange
属性(ScreenOrientation 用)
§5.
orientation
属性(Screen 用)
§4.
OrientationLockType 列挙型
§6.
[[orientationPendingPromise]]
内部スロット(Document 用)
§3.1
OrientationType 列挙型
§7.
"portrait"
(OrientationLockType の列挙値)
§6.
ScreenOrientation インターフェース
§5.
type
属性(ScreenOrientation 用)
§5.
[[type]]
内部スロット(ScreenOrientation 用)
§5.1
unlock
メソッド(ScreenOrientation 用)
§5.
Screen
インターフェース
Document インターフェイス
EventTarget インターフェイス
EventHandler
Window
インターフェイス
AbortError 例外
DOMException インターフェイス
DOMString インターフェイス
[Exposed] 拡張属性
InvalidStateError 例外
NotAllowedError 例外
NotSupportedError 例外
Promise インターフェイス
[SameObject] 拡張属性
SecurityError 例外
undefined 型
unsigned short 型
Christophe Dumez、Anne van Kesteren、Chundong Wang、Fuqiao Xue、 および Chaals McCathie Nevile に有益なコメントをいただいたことに感謝します。
本 API の初期設計への貢献に対し、Chris Jones および Jonas Sicking に特に感謝します。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: