/
481.txt
225 lines (176 loc) · 11 KB
/
481.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
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
[30] [DFN[[RUBY[閲覧文脈][えつらんぶんみゃく]@en[browsing context]]]]は、
[[Webブラウザー]]における[[窓]]や[[タブ]]、[[フレーム]]に相当する内部オブジェクトです。
;; [31] [[JavaScript]] からは [CODE(DOMi)@en[Window]] [[オブジェクト]]のように見えますが、
厳密には異なります。
* 仕様書
[REFS[
- [2] [[HTML Standard]]
-- [3] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-03-31 07:16:44 +09:00]] 版) <https://html.spec.whatwg.org/#browsing-context>'''
-- [40] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#garbage-collection-and-browsing-contexts>
-- [22] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-02-10 21:36:05 +09:00]] 版) <https://html.spec.whatwg.org/#concept-document-bc>
]REFS]
* 意味
[1] [DFN[[RUBY[閲覧文脈][えつらんぶんみゃく]@en[browsing context]]]]は、そこに於いて [CODE(DOMi)@en[[[Document]]]] [[オブジェクト]]が[[利用者]]に[RUBYB[提示される]@en[presented]][RUBYB[[[環境]]]@en[environment]]です
[SRC[WA1 >>3]]。
;; [7] [[閲覧文脈]]とは要は[[Webブラウザー]]の[[タブ]]であったり [CODE(HTMLe)@en[[[iframe]]]]
[[要素]]であったりと、[WEAK[([[文書]]の側からすると)]]
[CODE(JS)@en[[[window]]]] [[オブジェクト]]によって表されるものなのですが、
実際にはこの周辺の仕組みは極めて複雑なためにまどろっこしい定義になっています。
[EG[
[4] [[Webブラウザー]]の[[窓]]や[[タブ]]は通常[[閲覧文脈]]を1つ含んでいます。
[5] [CODE(HTMLe)@en[[[iframe]]]] [[要素]]や [CODE(HTMLe)@en[[[frame]]]] [[要素]]は[[閲覧文脈]]を作ります。
[6] [CODE(HTMLe)@en[[[object]]]] [[要素]]はその[RUBYB[[[表す]]]@en[represent]]内容によっては[[閲覧文脈]]を作ります。
[HISTORY[
[15] [[ウィジェット実現値]]は[[閲覧文脈]]です。
]HISTORY]
]EG]
* 状態
[20] [[閲覧文脈]]は、次の状態を持ちます。
[FIG(list members)[
:[[入れ子閲覧文脈]]か:[[入れ子閲覧文脈]]か[[最上位閲覧文脈]]か。
作成時に決まり、変化することはありません。
:[[補助閲覧文脈]]か:[[補助閲覧文脈]]かどうか。作成時に決まり、変化することはありません。
:[[二次的閲覧文脈]]か:[[二次的閲覧文脈]]かどうか。作成時に決まり、変化することはありません。
:[CODE(DOMi)@en[[[WindowProxy]]]]:>>10
:[CODE(DOMi)@en[[[Window]]]]:[[大域オブジェクト]]です。
:[[セッション履歴]]:本[[閲覧文脈]]で表示した[[文書]]と付随する状態のリスト。
:[[作成子閲覧文脈]]:作成の責を負った[[閲覧文脈]] [SRC[>>3]]。
:[[作成子[CODE(DOMi)@en[Document]]]]:作成時点での[[作成子閲覧文脈]]の[[活性文書]] (あれば)
[SRC[>>3]]。
:[[閲覧文脈包含子]]:
:[[親閲覧文脈]]:
:[[最上位閲覧文脈]]:[[親閲覧文脈]]をそれ以上辿れない[[閲覧文脈]]です。
:[F[[[opener閲覧文脈]]]]の逆関係の[[閲覧文脈]]群:
[[直接到達可能閲覧文脈]]かどうかの判定のために[[opener閲覧文脈]]の逆方向の[[閲覧文脈]]かどうか決定できる必要があります。
:[[script-closable]]:[CODE(JS)@en[[[window.close]]]] が機能する条件です。
:[[閲覧文脈名]]:
:捨てられた:[[閲覧文脈を捨てる]]処理が行われたかどうか。
:[[活性文書]]:[[現在エントリー]]の[[文書]]です。
:[[関連する類似起源閲覧文脈の単位]]:所属する[[関連する類似起源閲覧文脈の単位]]です。
[[活性文書]]が変化すると、変化するかもしれません。
:[[イベントループ]]:[[関連する類似起源閲覧文脈の単位]]の[[イベントループ]]です。
:[[画布]]:
:[[閲覧領域]]:
:[[非保安要求ポリシー]]: [CODE(URI)@en[[[http:]]]] → [CODE(URI)@en[[[https:]]]]
の [[URL]] 書き換えを行うか否か。
:[[非保安navigate格上げ集合]]: [[navigate]] 時に
[CODE(URI)@en[[[http:]]]] → [CODE(URI)@en[[[https:]]]] の [[URL]] 書き換えを行うか否か。
]FIG]
[29] [[最上位閲覧文脈]]は、加えて次の状態を持ちます。
[FIG(list members)[
:[[popup sandboxing flag set]]:
:[[セッション履歴探索キュー]]:[[セッション履歴]]上の移動の処理を扱う[[タスクキュー]]です。
:[[セッション履歴イベントループ]]:[[セッション履歴探索キュー]]を処理するものとして[[並列に]]実行されるものです。
:[[結合セッション履歴]]:[[セッション履歴]]と[[入れ子閲覧文脈]]の[[セッション履歴]]を結合したものです。
:[[セッションストレージ領域]]群:
[[セッションストレージ領域]]は、 [CODE(DOMm)@en[[[sessionStorage]]]] で使われます。
[[起源]]ごとに存在します。
]FIG]
[25] [[入れ子閲覧文脈]]は、加えて次の状態を持ちます。
[FIG(list members)[
:関連付けられた[[要素]]:[[入れ子閲覧文脈]]を作成した[[要素]]に関連付けられます。
:[[delaying [CODE(DOMe)@en[load]] events mode]]:[[delay the load event]] の適用対象になっているかどうかのフラグ。
:[[[CODE(HTMLe)@en[iframe]] sandboxing flag set]]:
[CODE(HTMLe)@en[[[iframe]]]] [[要素]]の[[属性]]から得られた [[sandboxing flag set]]。
[HISTORY[
:[F[[[seamless browsing context flag]]]]:
]HISTORY]
]FIG]
[27] [[補助閲覧文脈]]は、次の状態を持ちます。
[FIG(list members)[
:[F[[[opener閲覧文脈]]]]: 本[[閲覧文脈]]を開いた元の[[閲覧文脈]]。
:スクリプトにより作成されかどうか:[[script-closable]] かどうかの決定で参照されます。
]FIG]
* 閲覧文脈同士の関係
[FIG(short list)[
- [[親閲覧文脈]]
- [[子閲覧文脈]]
- [[祖先閲覧文脈]]
- [[最上位閲覧文脈]]
- [[入れ子閲覧文脈]]
- [[familiar with]]
- [[allowed to navigate]]
- [[直接到達可能閲覧文脈群]]
]FIG]
[16] [[閲覧文脈]]群には次のようなグループ化の単位があります。
[FIG(short list)[
- [[関連する類似起源閲覧文脈の単位]]
- [[関連閲覧文脈の単位]]
]FIG]
[26] [[閲覧文脈]]を介した[[文書]]との関係
[FIG(short list)[
- [[nested through]]
- [[文書族]]
]FIG]
[28] [[閲覧文脈]]は使われ方により次のように分類されます (次のリストの各項目は、
互いに排他的とは限りません)。
[FIG(list short)[
- [[最上位閲覧文脈]]
- [[入れ子閲覧文脈]]
- [[auxiliary browsing context]]
- [[secondary browsing context]]
]FIG]
* 文書との関係
[21] [DFN[[RUBYB[[CODE(DOMi)@en[Document]]の[F[閲覧文脈]]]@en[[CODE(DOMi)@en[Document]]'s [F[browsing context]]]]]]は、
[F[[[セッション履歴]]]]に当該 [CODE(DOMi)@en[[[Document]]]] を含むような[[閲覧文脈]] (あれば)
です [SRC[>>22]]。
[CODE(JS)@en[document.defaultView]] に相当します。
[37] [[文書]]の[F[閲覧文脈]]があることを、「[[閲覧文脈]][RUBYB[中にある]@en[in]]」
などといいます。 [[navigate]] で作られた[[文書]]など[[閲覧文脈]]中にある[[文書]]もあれば、
[[XHR]] で作られた[[文書]]など[[閲覧文脈]]を持たない[[文書]]もあります。
[38] [[閲覧文脈]]に現在表示中の[[文書]]のことを[F[活性文書]]といいます。
[CODE(JS)@en[window.document]] に相当します。
[23] [[セッション履歴]]、[[セッション履歴エントリー]]も参照。
* 窓との関係
[10] [[閲覧文脈]]には、それに対応する [CODE(DOMi)@en[[[WindowProxy]]]]
[[オブジェクト]]が1つあります。 [SRC[>>3]]
[[閲覧文脈]]は、 [CODE(DOMi)@en[[[WindowProxy]]]] への[[強い参照]]を持ちます [SRC[>>40]]。
[11] それに対して[[閲覧文脈]]で提示される [CODE(DOMi)@en[[[Document]]]]
[[オブジェクト]]には、''それぞれ''対応する [CODE(DOMi)@en[[[Window]]]]
[[オブジェクト]]が1つずつあります。[SRC[>>3]]
;; [32] なお [CODE(DOMi)@en[[[Window]]]] は [[JavaScript]] [[大域オブジェクト]]です。
[12] [CODE(DOMi)@en[[[WindowProxy]]]] はその名の通り「[RUBYB[[[串]]]@en[proxy]]」であり、
すべてをその[[閲覧文脈]]の[[活性文書]]の [CODE(DOMi)@en[[[Window]]]]
[[オブジェクト]]に転送します。 [SRC[>>3]]
[35] 仕様上 [CODE(DOMi)@en[[[WindowProxy]]]] と[[閲覧文脈]]は別のオブジェクトとして規定されていますが、
[[閲覧文脈]]は仕様書上にのみ登場する内部オブジェクトで、[[JavaScript]]
からはアクセスできませんから、どう実装されるかは
[[Webブラウザー]]によります。両者は常に一対一対応していますから、
実質的に同じオブジェクトとみなすこともできます。
* 作成
[8] [[閲覧文脈の作成]]を参照。
* 破棄
[39] [[閲覧文脈]]を破棄する処理はいくつかあります。
[FIG(list)[
- [CODE(JS)@en[[[window.close]]]]
- [[閲覧文脈を閉じる]]
- [[閲覧文脈を捨てる]]
]FIG]
* レンダリング
[9] [[レンダリングの更新]]を参照。
* 歴史
[33] [[Netscape]] 2 により [[JavaScript]] と[[フレーム]]が導入されました。
現在の[[閲覧文脈]]に相当するものはこの時に登場したことになります。
[34] [[閲覧文脈]]という用語が登場しその性質と挙動が初めて明確に規定されたのは、
その10年後の [[Web Applications 1.0]] (現 [[HTML Standard]]) でした。
[13] [CITE[''''''[''''''whatwg'''''']'''''' Should events be paused on detached iframes?]]
( ([TIME[2010-12-07 21:22:35 +09:00]] 版))
<http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-December/029346.html>
[14] [CITE@en-US[Window Object 1.0]]
( ([TIME[2006-04-08 02:19:28 +09:00]] 版))
<http://www.w3.org/TR/Window/#dfn-browsing-context>
[17] [CITE@en[Web Applications 1.0 r8776 Try to fix the logic around opening new tabs because the user said so, even in sandboxed environments]]
( ([TIME[2014-09-17 05:32:00 +09:00]] 版))
<https://html5.org/r/8776>
[18] [CITE@en[MIX: Drop "JavaScript Global Environment". · 5d32821 · w3c/webappsec]]
( ([TIME[2014-10-21 09:48:34 +09:00]] 版))
<https://github.com/w3c/webappsec/commit/5d32821b21f3cb06a651c966f729b3044292a08a>
[19] [CITE@en[Web Applications 1.0 r8882 Add hyperlinks for creating browsing contexts.]]
( ([TIME[2015-01-16 08:39:00 +09:00]] 版))
<https://html5.org/r/8882>
[24] [CITE@en[Clarify the definition of window.frameElement · whatwg/html@a398377]]
([TIME[2016-02-10 23:01:26 +09:00]] 版)
<https://github.com/whatwg/html/commit/a398377bbc8483e27c4fc478a097ef72f3057593>
[36] [CITE@en[Use new "document's browsing context" concept everywhere · whatwg/html@6fe2ac7]]
([TIME[2016-02-11 11:40:38 +09:00]] 版)
<https://github.com/whatwg/html/commit/6fe2ac75f7ab63b98fe1637129f0a8574a542e55>