-
Notifications
You must be signed in to change notification settings - Fork 4
/
256.txt
193 lines (156 loc) · 13.9 KB
/
256.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
[4] [DFN[[RUBYB[[[スクリプト設定群オブジェクト]]]@en[script settings object]]]]は、
[[スクリプト]]の実行時の諸条件の集合体です。
* 仕様書
[REFS[
- [3] '''[CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#script-settings-object>'''
- [34] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#set-up-a-worker-script-settings-object>
- [39] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#calling-scripts>
]REFS]
* スクリプト設定群オブジェクト
[18] [[スクリプト設定群オブジェクト]]と[[大域オブジェクト]]には常に1対1の関係があります。
[DFN[[RUBYB[[[大域オブジェクトの関連する設定群オブジェクト]]]@en[relevant settings object for a global object]]]]とは、
その[[大域オブジェクト]]が用いられている (>>8) [[スクリプト設定群オブジェクト]]のことをいいます。 [SRC[>>3]]
;; [19] [[大域オブジェクト]]が[[ごみ収集]]されない間は[[大域オブジェクトのスクリプト設定群オブジェクト]]も[[ごみ収集]]されないものと思われます。
[5] [[スクリプト設定群オブジェクト]]は次のものにより構成されます。
[FIG[
- [6] [DFN[[RUBYB[[[スクリプト実行環境]]]@en[script execution environment]]]]は、
[[利用者エージェント]]が対応している各[[スクリプト言語]]について、
当該[[スクリプト言語]]に依存した[[スクリプト実行環境]]の性質です。 [SRC[>>3]]
-- [7] [[JavaScript]] の場合、[RUBYB[[[解釈器]]]@en[interpreter]]、
[[実行文脈のスタック]]、[[大域コード]]と[[関数コード]]と得られた [CODE(JS)@en[[[Function]]]]
[[オブジェクト]]、その他です。 [SRC[>>3]]
- [8] [DFN[[RUBYB[[[大域オブジェクト]]]@en[global object]]]]は、この[[設定群オブジェクト]]を使う[[スクリプト]]の[[コード]]が呼べる [[API]] を提供する[[オブジェクト]]です。 [SRC[>>3]]
-- [9] これが空の[[オブジェクト]]だと、環境に作用することを何もできません。 [SRC[>>3]]
- [10] [DFN[[RUBYB[[[有責閲覧文脈]]]@en[responsible browsing context]]]]は、
この[[設定群オブジェクト]]を使う[[スクリプト]]による動作に責任をもつ[[閲覧文脈]]です。 [SRC[>>3]]
- [11] [DFN[[RUBYB[[[有責文書]]]@en[responsible document]]]]は、
この[[設定群オブジェクト]]を使う[[スクリプト]]による動作に責任を持つ[[文書]]です。 [SRC[>>3]]
- [12] [DFN[[RUBYB[[[有責イベントループ]]]@en[responsible event loop]]]]は、
どの[[イベントループ]]を使うか自明でない時に使う[[イベントループ]]です。 [SRC[>>3]]
- [13] [DFN[[RUBYB[[[API参照子源]]]@en[API referrer source]]]]は、 [[fetch]] 内で [CODE(HTTP)@en[[[Referer]]]]
の値を決めるために使われる[[文書]]または [[URL]] です。 [SRC[>>3]]
- [14] [DFN[[RUBYB[[[API URL文字符号化]]]@en[API URL character encoding]]]]は、
この[[設定群オブジェクト]]を使う[[スクリプト]]が呼ぶ [[API]] で [[URL]]
を[[符号化]]するために使われる[[文字符号化]]です。 [SRC[>>3]]
- [15] [DFN[[RUBYB[[[API基底URL]]]@en[API base URL]]]]は、
この[[設定群オブジェクト]]を使う[[スクリプト]]が呼ぶ [[API]] で[[相対URL]]
を[[解決]]するために使われる[[絶対URL]]です。 [SRC[>>3]]
- [16] [DFN[[RUBYB[[[起源]]]@en[origin]]]] [SRC[>>3]]
- [17] [DFN[[RUBYB[[[実効スクリプト起源]]]@en[effective script origin]]]] [SRC[>>3]]
]FIG]
;; [23] 仕様上各構成要素は値ではなく、[[アルゴリズム]]となっています。各構成要素は固定の値を持つのではなく、
参照される時点で評価した結果の値が用いられることになります。
** [CODE(DOMi)@en[Window]]
[21] [CODE(DOMi)@en[[[Window]]]] の[[スクリプト設定群オブジェクト]]は次のものです [SRC[>>3]]。
[FIG[
- [22] [[スクリプト実行環境]]は、[[利用者エージェント]]が対応している各[[スクリプト言語]]について作成した実行環境です。
- [24] [[大域オブジェクト]]は、当該 [CODE(DOMi)@en[[[Window]]]] です。
- [25] [[有責閲覧文脈]]は、当該 [CODE(DOMi)@en[[[Window]]]] の[[閲覧文脈]]です。
- [26] [[有責文書]]は、当該 [CODE(DOMi)@en[[[Window]]]] の現在の[[文書]]です。
- [27] [[有責イベントループ]]は、当該 [CODE(DOMi)@en[[[Window]]]] の[[閲覧文脈]]が属する[[関連する類似起源閲覧文脈の単位]]の[[イベントループ]]です。
- [28] [[API参照子源]]は、当該 [CODE(DOMi)@en[[[Window]]]] の現在の [CODE(DOMi)@en[[[Document]]]] です。
- [29] [[API URL文字符号化]]は、当該 [CODE(DOMi)@en[[[Window]]]] の現在の [CODE(DOMi)@en[[[Document]]]]
の[[文字符号化]]です。
- [30] [[API基底URL]]は、当該 [CODE(DOMi)@en[[[Window]]]] の現在の [CODE(DOMi)@en[[[Document]]]]
の[[基底URL]]です。
- [31] [[起源]]は、当該 [CODE(DOMi)@en[[[Window]]]] の現在の [CODE(DOMi)@en[[[Document]]]]
の[[起源]]です。
- [32] [[実効スクリプト起源]]は、当該 [CODE(DOMi)@en[[[Window]]]] の現在の [CODE(DOMi)@en[[[Document]]]]
の[[実効スクリプト起源]]です。
]FIG]
[33] この通り、いずれも (値を取得した時点での) [CODE(DOMi)@en[[[Window]]]] や [CODE(DOMi)@en[[[Document]]]]
から自明に決まる値となります。
** ワーカー
[35] [[ワーカー]]については、
[DFN[[RUBYB[[[ワーカースクリプト設定群オブジェクトを設定]]]@en[set up a worker script settings object]]]]する手順により次の通り[[スクリプト設定群オブジェクト]]が作られます
[SRC[>>34]]。
[FIG[
- [36] [[スクリプト実行環境]]は、[[利用者エージェント]]が対応している各[[スクリプト言語]]について作成した実行環境です。
- [37] [[大域オブジェクト]]は、与えられた[[大域スコープ]]です。
- [25] [[有責閲覧文脈]]は、本[[設定群オブジェクト]]作成時点での [[incumbent settings object]] の[[有責閲覧文脈]]です。
- [26] [[有責文書]]は、本[[設定群オブジェクト]]作成時点での [[incumbent settings object]] の[[有責文書]]です。
- [27] [[有責イベントループ]]は、新たに作成した本[[ワーカー]]用の[[イベントループ]]です。
- [28] [[API参照子源]]は、[[ワーカー]]の[[スクリプト]]の [[URL]] です。
- [29] [[API URL文字符号化]]は、 [[UTF-8]] です。
- [30] [[API基底URL]]は、[[ワーカー]]の[[スクリプト]]の [[URL]] です。
- [31] [[起源]]は、 [[incumbent settings object]] の[[起源]]です。
- [32] [[実効スクリプト起源]]は、 [[incumbent settings object]] の[[起源]]です。
]FIG]
* 演算
[38] [CODE(DOMm)@en[[[postMessage]]]] では、[[設定群オブジェクト]]に関して
[[transfer a [CODE(DOMi)@en[Transferable]] object]] が実行されます。この手順では、
特定環境で作られたオブジェクトを他の環境へと移し替える操作が行われます。
* スタック
[40] [[関連する類似起源閲覧文脈の単位]]ごとに1つ、
[DFN[[RUBYB[[[スクリプト設定群オブジェクトのスタック]]]@en[stack of script settings objects]]]]があります。 [SRC[>>39]]
[41] このスタックは、その名の通り[[スクリプト設定群オブジェクト]]を追加 ([[push]]) したり削除 ([[pop]])
したりできるものです。このスタックは、初期状態では空でなければ[['''なりません''']] [SRC[>>39]]。
このスタックに含まれる各項目 ([[スクリプト設定群オブジェクト]]) には、
「[RUBYB[[[候補入口設定群オブジェクト]]]@en[candidate entry settings object]]」
というフラグをつけることができます [SRC[>>39]]。
* 起源
[43] [[スクリプト]]を介した色々な操作のアクセス制御が[[同一起源ポリシー]]によって行われます。
この時利用されるのが、[[スクリプト設定群オブジェクト]]の[[起源]]や[[実効スクリプト起源]]です。
;; [44] これらは以前は単に「[[スクリプト]]の[[起源]]」、「[[スクリプト]]の[[実効スクリプト起源]]」などと呼ばれていたこともありました。
[45] [[起源]]や[[実効スクリプト起源]]は、 >>21 や >>35 の通り、[[スクリプト設定群オブジェクト]]の作成時に決まります。
* 歴史
[REFS[
- [246] [CITE@en[Web Applications 1.0 r7236 Recast how the origin handling is done for data: URLs in workers, and fix the shared worker origin handling for data: URLs so that you can actually reconnect to a data: shared worker.]]
( ([TIME[2012-08-10 03:29:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7235&to=7236>
- [282] [CITE@en[Web Applications 1.0 r8262 Move the spec from a stack of incumbent scripts to a stack of script settings object. This should in theory have no concrete effects (though I may have changed some of the origin used for Web Workers started from document.domain-affected scripts that were called from other scripts with different original origins).]]
( ([TIME[2013-11-09 08:21:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8261&to=8262>
- [1] [CITE@en[Web Applications 1.0 r8263 Prepare for WebIDL integration]]
( ([TIME[2013-11-12 03:10:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8262&to=8263>
- [2] [CITE@en[Web Applications 1.0 r8264 Some more tidying around script settings objects.]]
( ([TIME[2013-11-12 03:53:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8263&to=8264>
]REFS]
[46] [[スクリプトの起源]]は[[スクリプト設定群オブジェクト]]導入前は次のような規定でした。
[FIG[
[REFS[
- [135] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-02-22 20:11:59 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#origin>
- [248] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-11-16 20:26:18 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#worker-origin>
]REFS]
* 所有者により決まる場合
[164] [[スクリプト]]の[[起源]]は[DFN[[RUBYB[所有子]@en[owner]]]]の[[起源]]の[[別名]]であり、
[[実効スクリプト起源]]は[[所有子]]の[[実効スクリプト起源]]の[[別名]]です。
[[所有子]]は[[スクリプト]]の種類により次の通り定まります。 [SRC[>>135]]
:[CODE(HTMLe)@en[[[script]]]] [[要素]]:[CODE(HTMLe)@en[[[script]]]] [[要素]]の所属する [CODE(DOMi)@en[[[Document]]]]
[SRC[>>135]]
:[[事象取扱器内容属性]]:[[属性]]の所属する [CODE(DOMi)@en[[[Document]]]] [SRC[>>135]]
:他の[[スクリプト]]により作られた[[関数]]その他のコード参照:作った[[スクリプト]] [SRC[>>135]]
:[[HTTP]] [[リダイレクト]] (や[[他のプロトコルで等価なもの]]) により返された [CODE(URI)@en[[[javascript]]]] [[URL]]:
[CODE(URI)@en[[[javascript:]]]] [[URL]] に[[リダイレクト]]した [[URL]] [SRC[>>135]]
:[[属性]]にあった [CODE(URI)@en[[[javascript]]]] [[URL]]:
[[属性]]の所属する [CODE(DOMi)@en[[[Document]]]] [SRC[>>135]]
:[[スタイル・シート]]にあった [CODE(URI)@en[[[javascript]]]] [[URL]]:[[スタイル・シート]]の [[URL]] [SRC[>>135]]
:[[閲覧文脈]]が [[navigate]] 中の [CODE(URI)@en[[[javascript]]]] [[URL]] であって、[[利用者]]によって提供されたもの (例えば[[ブックマークレット]]):
[[閲覧文脈]]の[[活性文書]]の [CODE(DOMi)@en[[[Document]]]] [SRC[>>135]]
:[[閲覧文脈]]が [[navigate]] 中の [CODE(URI)@en[[[javascript]]]] [[URL]] であって、[[マーク付け]]によって提供されたもの:
[[URL]] を宣言している[[要素]] (例えば [CODE(HTMLe)@en[[[a]]]] [[要素]]) の [CODE(DOMi)@en[[[Document]]]]
[SRC[>>135]]
:[[閲覧文脈]]が [[navigate]] 中の [CODE(URI)@en[[[javascript]]]] [[URL]] であって、[[スクリプト]]によって提供されたもの:
[[URL]] を提供した[[スクリプト]] [SRC[>>135]]
* その他のものから決まる場合
[223] その他の場合、[[スクリプト]]の[[起源]]・[[実効スクリプト起源]]は次に示すように定まります。
:[[ワーカー]]で走っている[[スクリプト]]:[[ワーカー]]の [CODE(JS)@en[[[location]]]]
[[属性]]の[[絶対URL]]の[[起源]]
(通常はその [[URL]] 自体から決まる[[起源]]・[[実効スクリプト起源]]であるが、
[CODE(URI)@en[[[data]]]] [[URL]] が[[構築子]]に指定されて作られた[[ワーカー]]ではその
[[entry script]] の[[起源]]・[[実効スクリプト起源]]と同じ値となる (>>243)。) [SRC[>>131]]
* ワーカー起源
[249] [DFN[[RUBYB[ワーカー起源]@en[worker origin]]]]は、 [CODE(DOMi)@en[[[WorkerGlobalScope]]]]
[[オブジェクト]]が作られるときに決まる[[起源]]です。 [SRC[>>248]]
[[エントリー・スクリプト]]の[[起源]]だったり、 [CODE(DOMi)@en[[[SharedWorker]]]]
[[構築子]]の引数として指定された [[URL]] の[[起源]]だったりします。
>>246 で導入されました。
]FIG]
* 関連
[20] [[スクリプト]]はその構成要素として[[スクリプト設定群オブジェクト]]を1つ持っています。
これを[[スクリプトの関連する設定群オブジェクト]]といいます。
[42] [CITE[IRC logs: freenode / #whatwg / 20140416]]
( ([TIME[2014-04-17 16:38:42 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140416>