/
844.txt
146 lines (110 loc) · 7.57 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
[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[リンク[[ツールバー]]]] :
: [[状態バー]] :
: [[busy indicator]] :
: [[サイドバー]] :
: [[viewport]] :
]FIG]
[5] 実装によっては、相当するものが存在しないかもしれません。例えば、
[F[サイドバー]]に相当するものが無いかもしれません。
[6] 実装によっては、複数の[[窓][窓 (Web)]]でこれら構成要素の一部を共有しているかもしれません。
例えば[[タブブラウザー]]では、ここでいう[[窓][窓 (Web)]]は[[タブ]]に当たり、
[[アドレスバー]]はその[[タブ]]を含む[[窓]]全体で共有しているかもしれません。
[[Mac OS]] では、[[メニューバー]]は[[プラットフォーム]]全体で共有しているかもしれません。
[8] 一般的な[[Webブラウザー]]では、[F[最上位閲覧文脈]]が[[補助閲覧文脈]]かどうかで、
構成要素の表示の有無や機能が変化します。例えば[F[アドレスバー]]は、
[[補助閲覧文脈]]なら[[利用者]]が書き換えできなくなります。
[29] 他に、[[窓][窓 (Web)]]は次の状態を持ちます。
[FIG(list members)[
: [F[最上位閲覧文脈]] :
[[最上位閲覧文脈]]への[[強い参照]]を保持します ([[最上位閲覧文脈]]参照)。
: [F[X]] : [[画面]]上の[[左辺]]の位置。
: [F[Y]] : [[画面]]上の[[上辺]]の位置。
: [F[幅]] : [[画面]]上の[[幅]]。
: [F[高さ]] : [[画面]]上の[[高さ]]。
]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] 位置の表現については、[[座標系]]を参照。
* 閉じる
[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]] は、[[窓]]に対応する機能として作られたものですが、
現在では[[閲覧文脈]]に近いものとして規定されています。
* 歴史