/
481.txt
194 lines (151 loc) · 8.99 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
[30] [DFN[[RUBY[閲覧文脈][えつらんぶんみゃく]@en[browsing context]]]]は、
[[Webブラウザー]]における[[窓]]や[[タブ]]、[[フレーム]]に相当する内部オブジェクトです。
;; [31] [[JavaScript]] における [CODE(DOMi)@en[[[Window]]]] [[オブジェクト]]に極めて近いですが、厳密には異なります。
* 仕様書
[REFS[
- [2] [[Web Applications 1.0]] ([[HTML5]])
-- [3] '''<http://www.whatwg.org/specs/web-apps/current-work/complete.html#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>
]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]]]] [[オブジェクト]]によって表されるものなのですが、
実際にはこの周辺の仕組みは極めて複雑なためにまどろっこしい定義になっています。
* 具体例
- [4] [[Webブラウザー]]の[[窓]]や[[タブ]]は通常[[閲覧文脈]]を1つ含んでいます。
- [5] [CODE(HTMLe)@en[[[iframe]]]] [[要素]]や [CODE(HTMLe)@en[[[frame]]]] [[要素]]は[[閲覧文脈]]を作ります。
- [6] [CODE(HTMLe)@en[[[object]]]] [[要素]]はその[RUBYB[[[表す]]]@en[represent]]内容によっては[[閲覧文脈]]を作ります。
- [15] [[ウィジェット実現値]]は[[閲覧文脈]]です。
* メンバー
[20] [[閲覧文脈]]は、次の状態を持ちます。
[FIG(list members)[
:[CODE(DOMi)@en[[[WindowProxy]]]]:>>10
:[[文書]]群:>>41
:[[セッション履歴]]:本[[閲覧文脈]]で表示した[[文書]]と状態のリスト。
:[[作成子閲覧文脈]]:作成の責を負った[[閲覧文脈]] [SRC[>>3]]。
:[[作成子[CODE(DOMi)@en[Document]]]]:作成時点での[[作成子閲覧文脈]]の[[活性文書]] (あれば)
[SRC[>>3]]。
:[[閲覧文脈包含子]]:
:[[親閲覧文脈]]:
:[[閲覧文脈名]]:
:[[script-closable]]:
:[[a browsing context is discarded]]:
:[[イベントループ]]:
]FIG]
[37] 次のものは他の状態から決まります。
[FIG(list members)[
:[[最上位閲覧文脈]]:[[親閲覧文脈]]をそれ以上辿れない[[閲覧文脈]]です。
:[[活性文書]]:>>9
]FIG]
[29] [[最上位閲覧文脈]]は、次の状態を持ちます。
[FIG(list members)[
:[[popup sandboxing flag set]]:
:[[セッション履歴探索キュー]]:[[セッション履歴]]上の移動の処理を扱う[[タスクキュー]]です。
:[[セッション履歴イベントループ]]:[[セッション履歴探索キュー]]を処理するものとして[[並列に]]実行されるものです。
]FIG]
[38] 次のものは他の状態から決まります。
[FIG(list members)[
:[[結合セッション履歴]]:[[セッション履歴]]と[[入れ子閲覧文脈]]の[[セッション履歴]]を結合したものです。
]FIG]
[25] [[入れ子閲覧文脈]]は、次の状態を持ちます。
[FIG(list members)[
:[[seamless browsing context flag]]:
:[[delaying [CODE(DOMe)@en[load]] events mode]]:[[delay the load event]] の適用対象になっているかどうかのフラグ。
:[[[CODE(HTMLe)@en[iframe]] sandboxing flag set]]:
]FIG]
[27] [[auxiliary browsing context]] は、次の状態を持ちます。
[FIG(list members)[
:[[opener browsing context]]:
]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]
* 文書との関係
[8] [[閲覧文脈]]は[[セッション履歴]]を1つ持ちます。[[セッション履歴]]は、
その[[閲覧文脈]]で過去、現在、未来に於いて[RUBYB[提示される]@en[presented]]
[CODE(DOMi)@en[[[Document]]]] [[オブジェクト]]の[[リスト]]です。
[SRC[>>3]]
[9] [[閲覧文脈]]はある一時には1つの [CODE(DOMi)@en[[[Document]]]]
だけが[[活性文書]]として指示されています。
[SRC[>>3]]
[41] [[閲覧文脈]]は、その各[[文書]]に対して[[強い参照]]を持ちます [SRC[>>40]]。
[[文書を捨てる]]と、[[文書]]から[[閲覧文脈]]への[[強い参照]]は破棄されます [SRC[>>40]]。
[21] 通常は [CODE(DOMi)@en[[[Window]]]] と ([[閲覧文脈]]中にある) [CODE(DOMi)@en[[[Document]]]]
には[[一対一写像]]がありますが、2つ例外があります [SRC[>>3]]。
[FIG(list)[
- [22] [CODE(DOMi)@en[[[Window]]]] は、同じ[[閲覧文脈]]の次の [CODE(DOMi)@en[[[Document]]]]
に再利用されることがあります。
-- [23] 初期状態の [CODE(URI)@en[[[about:blank]]]] から次へ[[置換有効]]で [[navigate]]
した場合。
- [24] [CODE(DOMi)@en[[[Document]]]] は、 [CODE(JS)@en[[[document.open]]]]
により複数の [CODE(DOMi)@en[[[Window]]]] に再利用されることがあります。
]FIG]
[36] [[Webブラウザー]]組み込みの[[フィードビューアー]]への [[navigate]] やエラー画面への
[[navigate]] などにより、[[閲覧文脈]]が[[文書]]以外を表示する状態になることもあります。
もっとも、その場合でも (ダミーの) [[文書]]は存在しています。
;; [[navigate]] を参照。
* 窓との関係
[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ブラウザー]]によります。両者は常に一対一対応していますから、
実質的に同じオブジェクトとみなすこともできます。
* 歴史
[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>