/
844.txt
199 lines (156 loc) · 11.7 KB
/
844.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
[1] [DFN[[RUBY[窓][ウィンドウ]@en[window]]]]は、 [[Webブラウザー]]において[[利用者]]に[[レンダリング]]を提示するための基本的な単位です。
* 仕様書
[REFS[
- [17] [CITE@en[CSSOM View Module]] ([TIME[2016-08-09 18:15:49 +09:00]]) <https://drafts.csswg.org/cssom-view/#extensions-to-the-window-interface>
- [15] [CITE@en[WebDriver]] ([TIME[2016-07-22 07:24:31 +09:00]]) <https://w3c.github.io/webdriver/webdriver-spec.html#h-resizing-and-positioning-windows>
]REFS]
* 構成要素
[3] [[窓][窓 (Web)]]は、次の構成要素を持ちます。
[FIG(list members)[
: [[アドレスバー]] : [F[最上位閲覧文脈]]の[F[文書]]の[F[番地][文書の番地]]や[F[HTTPS状態]]などを表示します。また、[[利用者]]の操作により[F[最上位閲覧文脈]]の [[navigate]] の指示をします。
: [[タイトルバー]] : [F[題名]]を[[表示]]します。
: [[メニューバー]] :
: [F[機能[[ツールバー]]]] :
: [F[リンク[[ツールバー]]]] : [[栞]]や[[ブックマーク]]の一部または全部を表示し、
[[利用者]]の指示により[F[最上位閲覧文脈]]の [[navigate]] の指示をします。
: [[状態バー]] : [F[最上位閲覧文脈]]における [[navigate]] の進捗を表示したり、
[CODE(CSS)@en[:hover]] や [CODE(CSS)@en[:focus]] の状態にある[[ハイパーリンク]]の
[[URL]] を表示したりします。
: [[busy indicator]] : [F[最上位閲覧文脈]]における [[navigate]] の進捗を表示します。
: [[サイドバー]] :
: [F[viewport]] : [F[最上位閲覧文脈]]を[[レンダリング]]します。
: [F[[[音声]]の[[再生]]中か否か]] :
[[Chrome]] は[[タブ]]に[[音声]]を[[再生]]しているかどうかを表示します。
]FIG]
[5] 実装によっては、相当するものが存在しないかもしれません。例えば、
[F[サイドバー]]に相当するものが無いかもしれません。
[6] 実装によっては、複数の[[窓][窓 (Web)]]でこれら構成要素の一部を共有しているかもしれません。
例えば[[タブブラウザー]]では、ここでいう[[窓][窓 (Web)]]は[[タブ]]に当たり、
[[アドレスバー]]はその[[タブ]]を含む[[窓]]全体で共有しているかもしれません。
[[Mac OS]] では、[[メニューバー]]は[[プラットフォーム]]全体で共有しているかもしれません。
[8] 一般的な[[Webブラウザー]]では、[F[最上位閲覧文脈]]が[[補助閲覧文脈]]かどうかで、
構成要素の表示の有無や機能が変化します。例えば[F[アドレスバー]]は、
[[補助閲覧文脈]]なら[[利用者]]が書き換えできなくなります。
[29] 他に、[[窓][窓 (Web)]]は次の状態を持ちます。
[FIG(list members)[
: [F[最上位閲覧文脈]] :
[[最上位閲覧文脈]]への[[強い参照]]を保持します ([[最上位閲覧文脈]]参照)。
: [F[X]] : [[画面]]上の[[左辺]]の位置。
: [F[Y]] : [[画面]]上の[[上辺]]の位置。
: [F[幅]] : [[画面]]上の[[幅]]。
: [F[高さ]] : [[画面]]上の[[高さ]]。
: [F[題名]] : [F[最上位閲覧文脈]]の[F[文書]]の [CODE(DOMa)@en[title][document.title]]。
本[[窓][窓 (Web)]]が[[プラットフォーム]]の[[窓]]として[[レンダリング]]されるなら、
[[プラットフォーム]]の[[窓システム]]に対して、 (必要があれば)
本[[窓]]の名前として提示するものです。
例えば [[Windows]] では、[[タスクバー]]や[[タスクマネージャー]]の表示に使われます。
本[[窓][窓 (Web)]]が[[タブ]]として[[レンダリング]]されるなら、
[[タブ]]の名前として表示されるかもしれません。
: [F[色]] : [F[最上位閲覧文脈]]の[F[文書]]の [CODE(HTML)@en[<meta name=theme-color>]]
で指定された値 (あれば)。
本[[窓][窓 (Web)]]が[[プラットフォーム]]の[[窓]]として[[レンダリング]]されるなら、
[[プラットフォーム]]の[[窓システム]]に対して、 (必要があれば)
本[[窓]]の[[色]]として提示するものです。
本[[窓][窓 (Web)]]が[[タブ]]として[[レンダリング]]されるなら、
[[タブ]]の[[色]]として使われるかもしれません。
その他、[F[タイトルバー]]などの[[レンダリング]]にも使うかもしれません。
: [F[favicon]] : [F[最上位閲覧文脈]]の[F[文書]]の [F[favicon]] (あれば)。
なければ[[Webブラウザー]]依存の[[アイコン]]。
現在の一般的な [[Webブラウザー]]では、[[タブ]]に表示されます。
[[アドレスバー]]や[[プラットフォーム]]の[[窓]]一覧などに表示されることもあります。
: [F[最小化]] : [[窓]]が[[最小化]]状態かどうかを表します。
[[文書]]の[F[可視性状態]]に影響します。
値が変化した時 [CODE[visibilitychange]] が[[発火]]されるかもしれません。
: [F[前景]] : 同じ[[窓]]の他の[[タブ]]によって隠れた状態でないかどうかを表します。
[[文書]]の[F[可視性状態]]に影響します。
値が変化した時 [CODE[visibilitychange]] が[[発火]]されるかもしれません。
: [DFN[[F[プラットフォームの焦点を持つ]]]] :
本[[窓]]が[[ウィンドウマネージャー]]の[[フォーカス]]を持った状態かどうかを表します。
[[Pointer Lock]] 状態への移行時に参照されます。
[[窓]]が[[フォーカス]]を持っていても他の[[タブ]]が前景にあれば、
[[偽]]とするべきと思われます。
同じ[[窓]]内に複数の[[最上位閲覧文脈]]が同時に表示された状態で本[[閲覧文脈]]に[[フォーカス]]がない時どう扱うべきかは不明です。
]FIG]
* レンダリング
[2] そのまま[[窓]]として実装するのが初期の方法でしたが、
現在では[[タブ]]として実装するのが一般的になっています。
あるいは [[MDI]] における[[サブウィンドウ]]として表現されることもあります。
その他の表現方法も可能でしょう。
いずれにせよ、 [[CSSOM]] の定義上は一括して[[窓][窓 (Web)]]と呼ばれています。
[HISTORY[
[7] かつては、[[モーダルダイアログ]]として表示される[[窓][窓 (Web)]]もありました
([CODE(DOMm)@en[showModalDialog]])。
[9] かつては、[[二次的閲覧文脈]]として、1つの[[窓][窓 (Web)]]に複数の[[最上位閲覧文脈]]が存在する形態も想定されていました。
これは本体の画面の他に[[サイドバー]]にも別の画面が埋め込まれた状態を表していました。
;; [10] この[[仕様]]は削除されましたが、1つの[[窓]]に複数の[[最上位閲覧文脈]]を埋め込むこと自体が禁止されたわけではありません
(どのような[[窓]]の構成にし、どのように[[利用者]]に提供するかは、
[[Webブラウザー]]の裁量の範囲内です)。ただ、それは何らかの関係を持った[[閲覧文脈]]同士ではなく、
たまたま画面表示上並んでいるだけの別個の[[閲覧文脈]]でしかないものとしなければならない、ということです。
]HISTORY]
** 窓と画面
[16] [[窓]]は、[[画面]]上に表示されます。
[18] [[画面]]における[[窓]]の位置に関する次の操作が定義されています [SRC[>>17]]。
[FIG(short list)[
- [CODE(DOMm)@en[moveTo]]
- [CODE(DOMm)@en[moveBy]]
- [CODE(DOMa)@en[screenX]]
- [CODE(DOMa)@en[screenY]]
- [CODE(JS)@en[window.open]] [CODE(DOM)@en[left]]
- [CODE(JS)@en[window.open]] [CODE(DOM)@en[top]]
]FIG]
[19] [[窓]]自体の大きさに関する次の操作が定義されています [SRC[>>17]]。
[FIG(short list)[
- [CODE(DOMm)@en[resizeTo]]
- [CODE(DOMm)@en[resizeBy]]
- [CODE(DOMa)@en[outerWidth]]
- [CODE(DOMa)@en[outerHeight]]
- [CODE(JS)@en[window.open]] [CODE(DOM)@en[width]]
- [CODE(JS)@en[window.open]] [CODE(DOM)@en[height]]
]FIG]
[25] [CODE(DOMm)@en[resizeTo]] は [[viewport]] の大きさを指定することで、
[[窓][窓 (Web)]]の大きさを変更します [SRC[>>17]]。 [CODE(DOMm)@en[resizeBy]]
は[[窓][窓 (Web)]]の大きさの差分を指定して変更します [SRC[>>17]]。
[26] [CODE(JS)@en[window.open]] において、[CODE(DOM)@en[left]] と [CODE(DOM)@en[top]]
は[[窓][窓 (Web)]]の[[左辺]]と[[上辺]]の位置を指定するものとされています。
一方 [CODE(DOM)@en[width]] と [CODE(DOM)@en[height]] は、
[[viewport]] の幅と高さを指定するものとされています。 [SRC[>>17]]
[27] これらの有用性や整合性を考慮すると、
[[viewport]] の大きさと[[窓][窓 (Web)]]の大きさが連動することが期待されているようです。
[28] [CODE(DOMa)@en[outerWidth]] と [CODE(DOMa)@en[outerHeight]]
は、[[窓][窓 (Web)]]の[[幅]]と[[高さ]]を返します [SRC[>>17]]。
[24] 位置の表現については、[[座標系]]を参照。
[[マルチディスプレイ]]環境については、[[画面]]を参照。
** 最小化
[30] [[プラットフォーム]]によっては、[[窓]]を非表示状態にすることができ、
「[[最小化]]」、「[[アイコン化]]」などと呼ばれています。
@@ [31]
* 変化への反応
@@ プラットフォームからの変化の通知に対して・・・
* 閉じる
[11] [[窓][窓 (Web)]]には、「閉じる」操作が必要です。
[12] [[窓][窓 (Web)]]を閉じることを選択すると、[F[最上位閲覧文脈]]について[[閲覧文脈を捨てる]]操作を実行することが期待されています。
[4] 実際上、これは[[タブブラウザー]]なら[[タブ]]を閉じる操作かもしれませんし、
[[窓]]を閉じる操作によりその[[窓]]のすべての[[タブ]]を同時に閉じるのかもしれません。
[13] [[閲覧文脈を捨てる]]際に、[[スクリプトを無効]]にしても構わないとされています
([[閲覧文脈を捨てる]]参照)。つまり[[スクリプト]]実行中など[[閲覧文脈]]が通常の[[利用者]]の操作を直ちに受け付けない状態であっても、
[[閲覧文脈を捨てる]]機能を提供できます。実際、[[スクリプト]]の暴走や、
[[モーダルダイアログ]]の乱用、 [CODE[onbeforeunload]] や [CODE[onunload]]
の処理が長い場合などを想定すると、通常の「閉じる」操作と、
それにより閉じられない場合に強制的に「閉じる」操作の両方を[[利用者]]に提供する方が良さそうです。
* 閲覧文脈の窓
[20] [[閲覧文脈]]は、[F[窓][窓 (Web)]]を持ちます。
[[最上位閲覧文脈]]では、[[窓][窓 (Web)]]が値となります。
[[入れ子閲覧文脈]]では、 [CODE[null]] です。
[23] [[閲覧文脈]]の[F[窓][窓 (Web)]]は、作成時に決まり、以後変化しません。
[21] [[CSSOM View]] [[仕様書]]は、「[VAR[閲覧文脈]]'s window」
のような表現を使っています [SRC[>>17]] が、その定義は与えていません。
[22] [[CSSOM View]] の [CODE(DOMa)@en[outerWidth]] と [CODE(DOMa)@en[outerHeight]]
は、「client window」という語を使っています [SRC[>>17]] が、
その定義は与えていません。
* 関連
[14] [CODE(DOMi)@en[Window]] は、[[窓]]に対応する機能として作られたものですが、
現在では[[閲覧文脈]]に近いものとして規定されています。
* 歴史
[32] [CITE@en[security: suggest ux element to identify automation windows]]
([[andreastt]]著, [TIME[2016-09-22 01:03:44 +09:00]])
<https://github.com/w3c/webdriver/commit/a8ac274c1124ff24568d3579614dc65ff0c0d1c9>