-
Notifications
You must be signed in to change notification settings - Fork 4
/
661.txt
298 lines (247 loc) · 18.1 KB
/
661.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
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
[8] [[閲覧文脈の作成]]は、[[窓]]を開くなどの[[利用者]]の操作により、
あるいは [CODE(HTMLe)@en[[[iframe]]]] [[要素]]の挿入などの[[スクリプト]]の操作により、
行われます。
[41] [[閲覧文脈]]を作成すると、[[閲覧文脈]]に対応する [[JavaScript]]
[[オブジェクト]]であり[[大域オブジェクト]]でもある [CODE(DOMi)@en[[[Window]]]]
と、 [[JavaScript]] から実際にアクセスできる[[オブジェクト]]である
[CODE(DOM)@en[[[WindowProxy]]]] が作成されます。更に、
[[閲覧文脈]]の初期状態である [CODE(URI)@en[[[about:blank]]]] の[[文書]]が作成されます。
そしてこれらの関連付けと初期化が行われます。
* 仕様書
[REFS[
- [1] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#creating-a-new-browsing-context>'''
- [19] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#attr-iframe-sandbox>
- [25] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#the-sessionstorage-attribute>
- [29] [CITE@en[Upgrade Insecure Requests]] ([TIME[2015-10-07 03:24:10 +09:00]] 版) <https://w3c.github.io/webappsec-upgrade-insecure-requests/#nesting>
- [64] [CITE@en[High Resolution Time Level 2]] ([TIME[2016-02-26 04:49:50 +09:00]]) <https://w3c.github.io/hr-time/#h-time-origin-1>
]REFS]
* 文脈
[9] 次の場面で[[閲覧文脈の作成]]が呼び出されます。
[FIG(list)[
- 新しい[[窓]]や[[タブ]]を開いた場合
- [[閲覧文脈の選択]]
-- [[the rules for choosing a browsing context given a browsing context name]]
で新たに[[閲覧文脈]]を開く場合 [SRC[[[HTML Standard]]]]
-- [[ハイパーリンクをたどる]]際に新しい[[閲覧文脈]]を使う場合
-- [[フォームの提出]]で新しい[[閲覧文脈]]を使う場合
-- [CODE(JS)@en[[[window.open]]]] で新しい[[閲覧文脈]]を使う場合
- [[フレーム]]の[[文書への挿入]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[object]]]] [[要素]]で[[閲覧文脈]]を使う場合
- [CODE(HTMLe)@en[[[embed]]]] [[要素]]で[[閲覧文脈]]を使う場合
- [DEL[[CODE(DOMm)@en[[[showModalDialog]]]] [SRC[[[HTML Standard]]]]]]
]FIG]
* 処理
[2] [DFN[[RUBYB[新しい閲覧文脈の作成]@en[create a new browsing context]]]] [SRC[>>1]] は、
次のようにします。
[[引数]]として[VAR[作成子閲覧文脈]] ([[閲覧文脈]]または無指定)、
[VAR[入れ子か最上位か]]、[VAR[[[補助閲覧文脈]]か否か]]、
[VAR[noopener]] を指定できます。
[FIG(steps)[
= [50] [VAR[閲覧文脈]]を、新しい[[閲覧文脈]]に設定します。
[FIG(list members)[ [49] [[閲覧文脈]]
:[F[入れ子か最上位か]]: [VAR[入れ子か最上位か]]
:[F[[[補助閲覧文脈]]か]]: [VAR[[[補助閲覧文脈]]か否か]]
:[F[[[作成子閲覧文脈]]]]: [VAR[作成子閲覧文脈]]
: [F[作成子基底URL]] : [VAR[作成子閲覧文脈]]が [[null]] なら [[null]]、
それ以外なら[VAR[作成子閲覧文脈]]の[F[活性文書]]の[F[基底URL][文書基底URL]]
:[F[[[[CODE(HTMLe)@en[iframe]] sandboxing flag set]]]]:
[CODE(HTMLa)@en[sandbox]] [[属性]]を [[parse the sandboxing directive]]
して得た[[砂箱化フラグ集合]] ([CODE(HTMLe)@en[[[iframe]]]] [[入れ子閲覧文脈]]の場合)
[SRC[>>19]]。
]FIG]
= [48] [VAR[窓]]を、新しい [CODE(DOMi)@en[[[Window]]]] に設定します [SRC[>>1]]。
= [47] [VAR[realm実行文脈]]を、
[CODE[[[InitializeHostDefinedRealm]]]] [[抽象操作]]によって得た
[[JavaScript実行文脈]]に設定します。 [SRC[>>1]]。
[FIG(list members)[
:[[大域オブジェクト]]: [VAR[窓]]
:[[大域[CODE(JS)[this]]値]]: [VAR[閲覧文脈]]の [F[[CODE(DOMi)@en[WindowProxy]]]]
]FIG]
= [52] [VAR[設定群オブジェクト]]を、
[VAR[realm実行文脈]]について[[閲覧文脈環境設定群オブジェクトの設定]]を行った結果に設定します
[SRC[>>1]]。
= [15] [VAR[文書]]を、新しい[DFN[[RUBYB[初期「[CODE(URI)@en[about:blank]]」[[文書]]]@en[initial "[CODE(URI)@en[about:blank]]" document]]]]に設定します [SRC[>>1]]。
[FIG(list members)[
[FIGCAPTION[
[53] [[文書]]
]FIGCAPTION]
:[F[[[型]]]]: [[HTML文書]]
:[F[[[ready for post-load tasks]]]]: [[真]]
:[F[[[completely loaded]]]]: [[真]]
:[F[[[子供節点]]]]: [CODE(HTMLe)@en[[[html]]]] [[要素]]。その[[子供]]は
[CODE(HTMLe)@en[[[head]]]] [[要素]]と [CODE(HTMLe)@en[[[body]]]] [[要素]]
(いずれも[[空]])。
: [F[時刻起源]] : 現在時刻 [SRC[>>64]]
]FIG]
= [16] [VAR[閲覧文脈]]について[VAR[文書]]に[[活性文書を設定]]します [SRC[>>1]]。
= [37] [VAR[閲覧文脈]]の[F[作成子閲覧文脈]]が null なら [SRC[>>1]]、
== [39] [VAR[文書]]の[F[起源][文書の起源]]を、新しい[[不透明起源]]に設定します。
= [38] それ以外なら [SRC[>>1]]、
== [71] [VAR[作成子文書]]を、[VAR[作成子閲覧文脈]]の[F[活性文書]]に設定します。
== [42] [VAR[文書]]の[F[参照元][文書のreferrer]]を、[VAR[作成子文書]]の[F[番地][文書の番地]]に設定します。
== [35] [VAR[文書]]の[F[参照元ポリシー]]を、[VAR[作成子文書]]の[F[参照元ポリシー]]に設定します。
== [43] [VAR[文書]]の[F[起源][文書の起源]]を、[VAR[作成子文書]]の[F[起源][文書の起源]]に設定します。
== [70] [VAR[閲覧文脈]]の[F[作成子文脈セキュリティー]]を、
[VAR[作成子文書]]の[F[設定群オブジェクト]]に
[[Is environment settings object a secure context?]] を適用した結果に設定します。
= [18] [VAR[文書]]について[[砂箱化の実装]]を行います [SRC[>>1]]。
= [75]
[VAR[文書]]について[[set the allow* flags]]します。
[SRC[>>1]]
= [17] [VAR[閲覧文脈]]の[F[[[セッション履歴]]]]に、
新しい[[セッション履歴エントリー]]を追加します [SRC[>>1]]。
[FIG(list members)[
[FIGCAPTION[
[45] [[セッション履歴エントリー]]
]FIGCAPTION]
:[F[[[文書]]]]: [VAR[文書]]
]FIG]
= [22] [VAR[入れ子か最上位か]]が[[最上位閲覧文脈]]の場合、
== [23] 既存の[[閲覧文脈]]の[RUBYB[複製]@en[clone]]の場合は、
[[セッションストレージ領域]]群は元の[[閲覧文脈]]のものの複製とします。
(以後別物と考えます。) [SRC[>>25]]
== [24] 関係する[[文書]]が指定されている場合、
その[[文書の起源]]の[[セッションストレージ領域]]群は元の[[閲覧文脈]]のものの複製とします。
(以後別物と考えます。) [SRC[>>25]]
= [30] [VAR[入れ子か最上位か]]が[[入れ子閲覧文脈]]の場合、 [SRC[>>29]]
== [31] [[閲覧文脈]]の [[embedding document]] の[[非保安要求ポリシー]]が「格上げする」なら、
=== [32] [[閲覧文脈]]の[[非保安要求ポリシー]]を、「格上げする」に設定します。
=== [33] [[閲覧文脈]]の [[embedding document]] の[[非保安navigate格上げ集合]]の各値について、
[[閲覧文脈]]の[[非保安navigate格上げ集合]]に追加します。
= [63] [CODE[webNavigation]] API の [CODE[onCreatedNavigationTarget]] を現在時刻と共に実行します。 [SRC[仕様書なし]]
= [51] [VAR[閲覧文脈]]を返します [SRC[>>1]]。
]FIG]
;; [26] [[閲覧文脈]]の複製というのが具体的にどのような操作なのかは不明です。
そのような [[API]] は無さそうですが、そのような[[利用者]]の操作を実装している
[[Webブラウザー]]があります (例えば [[Chrome]] は[[タブ]]の複製操作があります)。
;; [27] 新しい[[閲覧文脈]]に関係する[[文書]]については、[[閲覧文脈の選択]]を参照。
([[閲覧文脈の選択]]によらない場合でも、理論上は [[Webブラウザー]]依存の方法
([[UI]]) から新しい[[閲覧文脈]]を作成した場合で該当することはあるかもしれません。)
;; [20] [[閲覧文脈]]の作成後、 (本作成手順の呼び出し元で) [[閲覧文脈名]]が設定されることになります。
[10] [CODE(DOMi)@en[[[Window]]]] は[[大域オブジェクト]]ですから、
付随して[[環境設定群オブジェクト]]、 [[JavaScript]] 実行環境、
[[Web IDL]] [[インターフェイスオブジェクト]]なども作られます。
この [CODE(DOMi)@en[[[Window]]]] は、 [[navigate]] により次の[[文書]]に再利用されることがあります。
;; [[文書オブジェクトの初期化]]参照。
[11] 本項の初期化手順の後に、[[閲覧文脈]]が使われる各文脈に依存した次の処理が
(必要なら) 行われます。
[12] [[Webブラウザー]]で新たな[[タブ]]を開いたことによる[[閲覧文脈]]の作成の場合には、
<about:newtab> などの [[Webブラウザー]]依存の初期ページや、
[[利用者]]の設定した[[ホームページ]]へと[[置換有効]]で [[navigate]] されます。
[13] 外部アプリケーションから [[Webブラウザー]]に [[URL]]
を指定して起動 (あるいは[[プロセス間通信]]により [[URL]] を開くことを指示)
した場合には、その [[URL]] へと[[置換有効]]で [[navigate]] されます。
[14] [[お気に入り]]や閲覧[[履歴]]などの [[Webブラウザー]]依存の[[利用者インターフェイス]]を通して
[[URL]] を指定して新しい[[閲覧履歴]]が開かれた場合には、
その [[URL]] へと[[置換有効]]で [[navigate]] されます。
[28] 作成した[[閲覧文脈]]がいつ[[利用者]]に表示されるかは、作成される場面や[[利用者エージェント]]の設計方針により異なります。
[[入れ子閲覧文脈]]の場合は、次の[[レンダリングの更新]]の時点と思われます。
[[最上位閲覧文脈]]の場合は、ただちに表示されるのが普通と思われますが、
敢えてそうしないこともあるかもしれません ([[navigate]] 参照)。
;; [[閲覧文脈の作成]]の呼び出し元で、[[閲覧文脈]]の表示サイズなどの設定が行われることがあります。
[CODE(JS)@en[[[window.open]]]] や[[閲覧文脈の選択]]を参照。
[54] いずれにせよ、 [[閲覧文脈の作成]]と前後して、その[[閲覧文脈]]の表示のための[[窓]]や[[タブ]]、
関係する[[利用者インターフェイス]]などの作成と初期化を適宜行う必要があります。
;; [55] その具体的な方法やタイミングは環境や実装方法に依存しますし、
[[Web互換性]]に直接影響しないので、[[標準化]]されていません。
[36] [[閲覧文脈]]は、
[DFN[[F[[RUBYB[[[作成子閲覧文脈]]]@en[creator browsing context]]]]]]、
[DFN[[F[[RUBYB[[[作成子文脈セキュリティー]]]@en[creator context security]]]]]]、
[DFN[[F[[RUBYB[[[作成子URL]]]@en[creator URL]]]]]]、
[DFN[[F[[RUBYB[[[作成子基底URL]]]@en[creator base URL]]]]]]、
[DFN[[F[[RUBYB[[[作成子参照元ポリシー]]]@en[creator referrer policy]]]]]]、
[DFN[[F[[RUBYB[[[作成子起源]]]@en[creator origin]]]]]] [SRC[>>1]] を持ちます。
これらは[[閲覧文脈の作成]]時に (あれば) 設定されます。
[F[作成子閲覧文脈]]と[F[作成子文脈セキュリティー]]は、いくつかの処理で参照されます。
[F[作成子基底URL]]は、[F[フォールバック基底URL]]の決定で参照されます。
[F[作成子URL]]と[F[作成子起源]]と[F[作成子参照元ポリシー]]は、
[[仕様書]]上の[[閲覧文脈の作成]]でのみ参照されるので、
実際には[[閲覧文脈]]の状態として保持し続ける必要はありません。
[HISTORY[
[44] かつては[F[作成子閲覧文脈]]と[DFN[[F[[RUBYB[作成子[CODE(DOM)@en[Document]]]@en[creator [CODE(DOM)@en[Document]]]]]]]]でした。
]HISTORY]
* 最初の [CODE(JS)@en[about:blank]] 文書
[4] [[閲覧文脈の作成]]時に作成される[[文書]]は、仕様書中では
「[[閲覧文脈]]作成時に追加された [CODE(URI)@en[[[about:blank]]]] [[文書]]」、
「初期『[CODE(URI)@en[about:blank]]』文書」などと呼ばれます。
[21] [[閲覧文脈]]作成時に[[セッション履歴]]に追加された
[CODE(URI)@en[[[about:blank]]]] [[文書]]は、次の場面で特別に扱われます。
[FIG(short list)[
- [[文書オブジェクトの初期化]]
- [CODE(JS)@en[[[location.assign]]]]
- [CODE(JS)@en[[[document.open]]]]
- [CODE(JS)@en[[[window.open]]]]
- [[フレーム]]
- [CODE(JS)@en[[[history.length]]]]
]FIG]
[5] 初期文書かどうかは、[[置換有効]]で [[navigate]] するかどうかの判断に使われます。
つまり初期文書は当該[[閲覧文脈]]で [[navigate]] が最初に発生した時に[[セッション履歴]]から削除されることになります。
[6] この判断は初期文書かどうか否かで行うので、[[スクリプト]]により内容を操作しているか否かは影響しません。 (ただし [CODE(JS)@en[[[document.open]]]] や
[CODE(DOMm)@en[[[pushState]]]] で[[セッション履歴エントリー]]が新たに追加されていれば、
初期文書が唯一の[[セッション履歴エントリー]]であるとの条件を満たさなくなります。)
[7] [CODE(DOMm)@en[[[replaceState]]]] や [CODE(JS)@en[[[document.open]]]]
で[[セッション履歴エントリー]]が置換された場合で [[URL]]
が [CODE(URI)@en[[[about:blank]]]] でなくなった場合、
あるいは [CODE(URI)@en[[[about:blank]]]] のままで[[セッション履歴エントリー]]が置き換わった場合にどう影響するのかは明確ではありません。
[[初期「[CODE(URI)@en[about:blank]]」文書]]であるかどうかの判断が[[文書]]に於けるものか[[セッション履歴エントリー]]に於けるものかで変わってきます。
* 歴史
[34] [CITE@en[Refactor browsing context creation · whatwg/html@357f649]]
([TIME[2015-12-16 16:04:28 +09:00]] 版)
<https://github.com/whatwg/html/commit/357f649a2fda01b0ae07c3d7643d3123d29a5538>
[46] [CITE@en[Rewrite global object initialization to delegate to ES · whatwg/html@cf0355d]]
([TIME[2015-12-16 18:15:51 +09:00]] 版)
<https://github.com/whatwg/html/commit/cf0355d7e0e229b98f7fbd51b8c7608010c787f5>
[56] [CITE@en[Rewrite script execution on top of ES · whatwg/html@4891d18]]
([TIME[2015-12-22 18:52:25 +09:00]] 版)
<https://github.com/whatwg/html/commit/4891d18aaf2df1d40aa61f467a5a10cfc19dd85d>
[57] [CITE@en[Define security around Window, WindowProxy, and Location properly · whatwg/html@acae3df]]
([TIME[2016-03-13 23:23:39 +09:00]] 版)
<https://github.com/whatwg/html/commit/acae3df652b382e9f4f1d1b4dc7e08e2b00df821>
[58] [CITE@en[Remove the origin aliasing concept · whatwg/html@438155d]]
([TIME[2016-03-23 22:18:13 +09:00]] 版)
<https://github.com/whatwg/html/commit/438155d2a2255aa5ea84ae390744d8a8662ebec2>
[59] [CITE@en[Sync with recent changes to the JS spec's job queue · whatwg/html@5af258f]]
([TIME[2016-03-24 21:42:47 +09:00]] 版)
<https://github.com/whatwg/html/commit/5af258f33e3e2f55eb30e611cb7aee625a8bd16a>
[60] [CITE@en[Define the origin of non-initial about:blank documents · whatwg/html@baad9fd]]
([TIME[2016-03-25 13:33:29 +09:00]] 版)
<https://github.com/whatwg/html/commit/baad9fd10e5a49c1c72fc89426ffa2a26e0b72e4>
[61] [CITE@en[Merge effective script origin into origin · whatwg/html@8a843f2]]
([TIME[2016-03-31 16:42:54 +09:00]] 版)
<https://github.com/whatwg/html/commit/8a843f2169a6864a3024c4329528dccb2051d275>
[40] [CITE@en[Remove the concept of creator Document so we don't leak a document · whatwg/html@a996f3b]]
([TIME[2016-04-06 17:18:18 +09:00]] 版)
<https://github.com/whatwg/html/commit/a996f3b4982f20697f71a23c919567a638519959>
[3] [CITE@en[Integrate with the Referrer Policy spec, part 2 of n]]
( ([[domenic]]著, [TIME[2016-05-18 01:52:35 +09:00]]))
<https://github.com/whatwg/html/commit/176e74243c649b709b9959b7d08b327290c2f403>
[62] [CITE@en[Cleanup "create a new browsing context"]]
( ([[annevk]]著, [TIME[2016-06-10 02:54:12 +09:00]]))
<https://github.com/whatwg/html/commit/f139279fb116bbde5d5ee3d257d21778cd774144>
[65] [CITE@en[Define initial about:blank document better]]
( ([[annevk]]著, [TIME[2016-06-21 13:53:01 +09:00]]))
<https://github.com/whatwg/html/commit/8edc92d6e42878662c7f9f75a43352bd341ae01d>
[66] [CITE@en[Use fullscreen logic for initial about:blank documents too]]
( ([[annevk]]著, [TIME[2016-06-09 21:47:29 +09:00]]))
<https://github.com/whatwg/html/commit/c2a8d605e0115c80d1ccb4b15371ecaa56a33e30>
[67] [CITE@en[Make allowfullscreen and allowusermedia match implementations]]
([[annevk]]著, [TIME[2016-07-07 04:47:42 +09:00]])
<https://github.com/whatwg/html/commit/9f6b91cb14a0f497ee5b3e7118ee65e687eaea78>
[68] [CITE@en[Add 'creator context security']]
([[mikewest]]著, [TIME[2016-07-16 04:27:52 +09:00]])
<https://github.com/whatwg/html/commit/91f1919249bc75e4a6491ee7ec650c9843f9da50>
[69] [CITE@en[Fixing some links and cleaning up lists.]]
([[mikewest]]著, [TIME[2016-07-15 22:00:54 +09:00]])
<https://github.com/w3c/webappsec-secure-contexts/commit/5f36532e8909c8bf72daa431724b6372bc5366ab>
[72] [CITE@en[Add environment's execution ready flag]]
([[jungkees]]著, [TIME[2016-11-09 19:26:26 +09:00]])
<https://github.com/whatwg/html/commit/d358c7814de8a053dcb8615a5d87e8c2e0e19257>
[74] [CITE@en[Snapshot allowpaymentrequest and allowusermedia attributes]]
([[zcorpan]]著, [TIME[2017-01-15 01:54:58 +09:00]])
<https://github.com/whatwg/html/commit/b3224a8457e32015153ed91f26b6212e25df1d6b>
[76] [CITE@en[Centralize setting the active document]]
([[annevk]]著, [TIME[2017-05-18 13:20:38 +09:00]])
<https://github.com/whatwg/html/commit/4257a9bf03f8ebbd6cc8b41933b6c5b619611662>
[73] [CITE@en[Make noopener stop the copying of session storage]]
([[mystor]]著, [TIME[2017-09-06 06:56:03 +09:00]])
<https://github.com/whatwg/html/commit/a68a1f712b641981d7367d78758596b21a04521c>