Copyright © 2023 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
The 画面の向き 仕様は、デバイスの画面の向きの種類と角度を標準化し、それをロックおよびロック解除する手段を提供します。 この仕様で定義された API は、デバイスの画面の向きの現在の種類と角度を公開し、変更時にイベントを発行します。これにより、Web アプリケーションは CSS と連携して複数の画面の向きに合わせてユーザー体験をプログラム的に適応させることができます。API はまた、特定の前提条件の下で画面の向きをロックすることも可能にします。これは、ユーザーが物理的にデバイスを回転させても画面の向き自体は変えたくないコンピュータゲームのようなアプリケーションで特に有用です。
この節は、この文書が公開された時点での文書の状態を説明します。現在の W3C 技術報告インデックス に、現在の W3C 出版物の一覧とこの技術報告の最新改訂版が掲載されています(https://www.w3.org/TR/)。
この文書は作業中です。
この文書は Web Applications Working Group により、Recommendation track を用いて Working Draft として公開されました。
作業草案としての公開は、W3C およびそのメンバーによる支持を意味するものではありません。
これはドラフト文書であり、いつでも更新、置換、または他の文書により廃止される可能性があります。本書を作業中の文書以外のものとして引用するのは適切ではありません。
この文書は、W3C 特許ポリシー の下で運営されるグループによって作成されました。 W3C は、グループの成果物に関連して行われたあらゆる特許開示の 公開リスト を管理しています。該当ページには特許の開示手順も記載されています。実際に特許を知っており、その特許が Essential Claim(s) を含むと信じる個人は、W3C 特許ポリシー第6節 に従って情報を開示しなければなりません。
この文書は、2023年6月12日 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">
Lock to...
</button>
<button onclick="screen.orientation.unlock()">
Unlock
</button>
画面の向きをロックするとは、OrientationLockType
の orientation
にロックすることで、ユーザーが画面を特定の画面の向き にのみ回転できることを意味します —
場合によっては他の向きが除外されます。画面が回転可能な向きは、ユーザーエージェント、ユーザーの設定、オペレーティングシステムの慣習、または画面自体によって決定されます。例えば、向きを landscape にロックすると、システムが許す場合はユーザーが landscape-primary および場合によっては landscape-secondary に回転できても、画面は portrait-secondary
に変更されることはありません。
画面の向きのロックを解除するとは、エンドユーザーがシステムが許容する任意の画面の向き に制限なく回転できることを意味します。
画面は、次のいずれかの 画面の向き にある、またはロックされることがあります:
null
である状態)。この向きはデバイスのオペレーティングシステム、またはユーザーエージェント、エンドユーザーによって制御されるか、あるいはインストールされたウェブアプリケーション
によって設定されることがあります。例えば、画面の向きがロック解除されていてユーザーがデバイスを回転させた場合、一部のデバイスは向きの変更を portrait-primary、landscape-primary、および landscape-secondary に制限し、portrait-secondary
にはしないことがあります。
出力デバイスの画面には、次の関連する概念があります:
OrientationLockType
として表したもの、または ロック解除 時の null
。
OrientationType
として表したもの。
以下の 画面の向きの値リスト は、異なる 自然な 向きを持つ画面における各画面の向き種類に関連付けられる角度を標準化します:
Document
インターフェースは、次の内部スロットで拡張されます:
Internal Slot | Description |
---|---|
[[orientationPendingPromise]] |
値は null または Promise のいずれかです。Promise
が割り当てられている場合、そのプロミスは画面の向きをロックする要求を表します。
|
WebIDLpartial interface Screen {
[SameObject] readonly attribute ScreenOrientation
orientation
;
};
Window
オブジェクトには関連付けられた
ScreenOrientation
があり、
これは Screen
の orientation
オブジェクト(つまり
window.screen.orientation
にある ScreenOrientation
インスタンス)です。
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
;
};
Internal Slot | Description |
---|---|
[[angle]] |
現在の向きの角度(度)としての、画面の最後に知られている値を、unsigned short で表します。これは
画面の向きの値リスト
に基づいて導出されます。
|
[[initialType]] | ブラウジングコンテキストが作成されたときの画面の 現在の向きの種類 を表します。 |
[[type]] |
画面の最後に知られている 現在の向きの種類 を、OrientationType
列挙値として表します。
|
lock
()
メソッドが OrientationLockType
の
orientation で呼び出されると、ユーザーエージェントは次の手順を実行する MUST です。
ユーザーエージェントは、画面の向きをロックするために、ドキュメントおよびその関連するブラウジングコンテキストが1つ以上の 事前条件 を満たすことを要求することが MAY あります。詳細は 10. Interaction with Web Application Manifest および 9. Interaction with Fullscreen API を参照してください。
Document
とします。
NotSupportedError
" の DOMException
で拒否されたプロミスを返し、これらの手順を中止します。
[[orientationPendingPromise]]
が
null
でない場合、現在のロックプロミスを拒否して null にする
ことにより document のプロミスを "AbortError
" で拒否します。
[[orientationPendingPromise]]
を新しいプロミスに設定します。
[[orientationPendingPromise]]
を返します。
unlock
()
メソッドが呼び出されると、ユーザーエージェントは次の手順を実行する MUST です:
Document
とします。
null
であれば undefined
を返します。
[[orientationPendingPromise]]
が
null
でない場合、現在のロックプロミスを拒否して null にする
ことにより document のプロミスを "AbortError
" で拒否します。
null
にして
document に適用します。
unlock
()
がプロミスを返さないのは、これは既定の画面の向き(default screen
orientation)にロックすることと同等であり、その既定の向きはユーザーエージェントにより既知であるとは限らないためです。したがって、ユーザーエージェントは新しい向きが何になるか、あるいはそもそも変わるかどうかを予測できません。
共通の安全チェック は、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
" は 任意 を表します。
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]]
内部スロットを、画面の 現在の向きの角度 に初期化します。
手順がドキュメント Document
の現在のロックプロミスを拒否して null にすることを要求し、かつ DOMString
型の exceptionName
で拒否する必要がある場合、ユーザーエージェント
は MUST 次のことを実行します。
[[orientationPendingPromise]]
が
null
ではないこと。
[[orientationPendingPromise]]
。
DOMException
で 拒否する。
[[orientationPendingPromise]]
を
null
に設定する。
手順が 向きのロックを適用する ことを要求し、OrientationLockType?
型の
orientation を Document
の document
に適用する必要がある場合、ユーザーエージェント
は MUST 次の手順を実行します。
[[orientationPendingPromise]]
が
null
でない場合、document の現在のロックプロミスを拒否して null
にする を
"AbortError
" で行う。
[[orientationPendingPromise]]
が null
であれば、次へ進む。
AbortError
" で行う。
[[orientationPendingPromise]]
が null
でない場合、document の現在のロックプロミスを拒否して
null にする を
"AbortError
" で行い、
これらの手順を中止する。
null
であれば、画面の向きのロックを解除する。
null
に設定する。
[[orientationPendingPromise]]
が null
でない場合、document
の現在のロックプロミスを拒否して null にする を
"NotSupportedError
"
で行う。
これは、ユーザーがウェブアプリケーションによる画面向きの変更を禁止する設定をしている場合や、ユーザーエージェントではなく基盤となるプラットフォーム自体が指定された orientation へのロックを許可していない場合に発生する可能性があります。
[[orientationPendingPromise]]
とする。
[[orientationPendingPromise]]
を null
に設定する。
null
でない場合、その
promise を undefined
で解決する。
ユーザーエージェントが、トップレベルのブラウジングコンテキスト に対して画面の向きが変更されたと判断した場合、またはユーザーがその トップレベルのブラウジングコンテキスト を別の画面に移動した場合、画面の向きの変更手順 をその トップレベルのブラウジングコンテキスト の アクティブドキュメント に対して実行します。
画面の向きの変更手順 は、Document
型の document に対して次の通り実行されます:
"hidden"
であれば、これらの手順を中止します。
ScreenOrientation
とします。
[[type]]
と等しく、かつ
angle が screenOrientation の [[angle]]
と等しい場合、これらの手順を中止します。
[[angle]]
を angle に設定します。
[[type]]
を
type に設定します。
[HTML] の表示状態の更新は、画面の向きの変更手順 を実行します。
アンロードドキュメントのクリーンアップ手順 が document に対して実行されるたびに、ユーザーエージェントは MUST 次の手順を実行します:
画面の向きの完全なロック解除手順 は、Document
型の document に対して次の通り実行されます:
[[orientationPendingPromise]]
が
null
でない場合、現在のロックプロミスを拒否して null にする を
"AbortError
" で実行します。
null
を指定して
topDocument に適用します。
ユーザーエージェントは SHOULD、lock
()
の使用を、単純なフルスクリーンドキュメントに対する事前条件として制限するべきです。[fullscreen]
document がフルスクリーンを終了するとき、同時に 画面の向きの完全なロック解除手順 も実行されます。[fullscreen]
Web アプリケーションマニフェスト 仕様は、ウェブアプリケーションが 既定の画面の向き を、orientation メンバーを通じて設定できるようにします。
ユーザーエージェントは SHOULD、インストールされたウェブアプリケーション
が事前条件として「fullscreen
」表示モードで表示されることを要求するべきです(pre-lock
conditionとして)。
車椅子のアーム等にデバイスが固定された向きで設置されているユーザーがいる可能性があるため、画面の向きをロックする際にユーザーがデバイスを回転させることを前提とする開発者は、Web コンテンツアクセシビリティ ガイドライン (WCAG) 2.1 の Orientation 成功基準 を認識しておく必要があります。該当の基準は、コンテンツと機能が 画面の向き にかかわらず利用可能であることを 必須 としています。特定の向きが 重要 である場合、ウェブアプリケーションはユーザーに向きの要件を通知しなければなりません。
画面の type と angle は、フィンガープリンティングの潜在的ベクターになり得ます。以下の緩和策は、デバイスがどのように保持されているかを明らかにしないことでユーザーのプライバシーを保護し、また secondary 向きの種類および関連する角度がフィンガープリンティングに利用されるのを防ぎます。
フィンガープリンティングに抵抗するため(例えばプライベートブラウジング中)、ユーザーエージェントは MAY 次のことを行うことができます:
[[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
Document
)
Document
)
Window
インターフェース
list
))
AbortError
例外
DOMException
インターフェース
DOMString
インターフェース
[Exposed]
拡張属性
InvalidStateError
例外
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:
Referenced in: