-
Notifications
You must be signed in to change notification settings - Fork 4
/
239.txt
106 lines (88 loc) · 5.48 KB
/
239.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
[23] [CODE(DOMi)@en[Location]] [[インターフェイス]]の
[DFN[[CODE(DOMm)@en[replace]]]] [[メソッド]]は、[[置換有効]]で [[navigate]]
することを指示するものです。 同じく [DFN[[CODE(DOMm)@en[assign]]]]
[[メソッド]]は、原則として[[置換有効]]とせずに [[navigate]]
することを指示するものです。
* 仕様書
[REFS[
- [19] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-03-14 22:44:13 +09:00]] 版) <https://html.spec.whatwg.org/#location>
-- [1] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#dom-location-assign>
-- [7] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#dom-location-replace>
]REFS]
* 性質
[28] [CODE(DOMm)@en[assign]] [[メソッド]]も [CODE(DOMm)@en[replace]]
[[メソッド]]も、 [CODE(IDL xattr)@en[Unforgeable]] です [SRC[>>1, >>7]]。
* メソッドの処理
[24] [CODE(DOMm)@en[assign]] [[メソッド]]は、次のようにしなければ[MUST[なりません]]
[SRC[>>1]]。
[FIG(steps)[
= [29] [VAR[URL]] を、第1引数を [CODE(IDL)@en[USVString]] として解釈した結果に設定します。
= [25] [[文脈オブジェクト]]の[F[[[関係する[CODE(DOMi)@en[Document]]]]]]の[F[実効スクリプト起源]]と[[入口設定群オブジェクト]]の[F[実効スクリプト起源]]が[[同じ起源]]でなければ、
== [26] [CODE(DOMe)@en[SecurityError]] [[例外]]を[[投げ]]、ここで停止します。
= [27] [VAR[結果]]を、[[入口設定群オブジェクト]]に対して [VAR[URL]]
を[[URLの構文解析]]した結果に設定します。
= [31] [VAR[結果]]が[[失敗]]なら、
== [32] [CODE(DOMe)@en[SyntaxError]] [[例外]]を[[投げ]]てここで停止します。
= [30] [[文脈オブジェクト]]と [VAR[結果]]の[[URL記録]]について
[[[CODE(DOMi)@en[Location]]-object navigate]] を実行します。
]FIG]
[9] [CODE(DOMm)@en[replace]] [[メソッド]]は、次のようにしなければ[MUST[なりません]]
[SRC[>>7]]。
[FIG(steps)[
= [2] [VAR[URL]] を、第1引数を [CODE(IDL)@en[USVString]] として解釈した結果に設定します。
= [3] [VAR[結果]]を、[[入口設定群オブジェクト]]に対して [VAR[URL]]
を[[URLの構文解析]]した結果に設定します。
= [4] [VAR[結果]]が[[失敗]]なら、
== [5] [CODE(DOMe)@en[SyntaxError]] [[例外]]を[[投げ]]てここで停止します。
= [6] [[文脈オブジェクト]]と [VAR[結果]]の[[URL記録]]について
[[[CODE(DOMi)@en[Location]]-object navigate]] を実行します。
[VAR[[[置換有効]]]]フラグを設定します。
]FIG]
;; [8] [CODE(JS)@en[location.assign]] とは違って [CODE(JS)@en[location.replace]]
では[[起源]]の検査は行われません。つまり他の任意の[[フレーム]]から呼び出すことができます。
* navigate 処理
[10] [CODE(DOMi)@en[Location]] [[オブジェクト]]の[[メソッド]]
[CODE(DOMm)@en[replace]], [CODE(DOMm)@en[assign]] を実行したり、
各[[URL分解属性]]の[[設定器]]に値を設定したりすると、 [[navigate]]
が発生します。これらは、 [[URL]] を組み立てた後、本項のような処理を実行します。
;; [11] [CODE(JS)@en[location.reload]] も [[navigate]] を発生させますが、
処理は少し違っています。
[12] [[仕様書]]上の手順である
[DFN[[[[CODE(DOMi)@en[Location]]-object navigate]]]] と
[DFN[[[[CODE(DOMi)@en[Location]]-object-setter navigate]]]]
は、 [CODE(DOMi)@en[Location]] [[オブジェクト]] [VAR[オブジェクト]]と
[[URL記録]] [VAR[URL]] について、
次のように [[navigate]] することをいいます [SRC[>>19]]。
[FIG(list members)[
: [VAR[navigate する[[閲覧文脈]]]] : [[閲覧文脈]]。
: [VAR[新しい資源]] : [VAR[URL]]。
: [VAR[[[原始閲覧文脈]]]] : [[現職設定群オブジェクト]]の[F[有責閲覧文脈]]。
: [VAR[[[置換有効]]]] : >>13
]FIG]
;; [22] ここでいう[[閲覧文脈]]は、[VAR[オブジェクト]]の[F[文書]]の[F[閲覧文脈]]と思われますが、
明記されていません。
[13] ここで、[VAR[[[置換有効]]]]は、次のように決定します [SRC[>>19]]。
[FIG(switch)[
: [15] [CODE(JS)@en[location.replace]] : [[真]]
: [34] [CODE(JS)@en[location.assign]] :
[FIG(steps)[
= [33] [[閲覧文脈]]の[F[セッション履歴]]が[[初期[CODE(URI)@en[about:blank]]文書]]のみなら、
[[真]]。
= [14] それ以外なら、[[偽]]。
]FIG]
: [35] その他 :
[FIG(steps)[
= [21] [[閲覧文脈]]の[F[セッション履歴]]が[[初期[CODE(URI)@en[about:blank]]文書]]のみなら、
[[真]]。
= [20] それ以外で、[VAR[オブジェクト]]の[F[[[関係する[CODE(DOMi)@en[Document]]]]]] が[F[completely loaded]] なら、[[偽]]。
= [36] それ以外で、[[現在走っているタスク]]が[F[信用済みクリック]]なら、[[偽]]。
= [37] それ以外なら、[[真]]。
]FIG]
]FIG]
* 歴史
[16] [CITE@en[Clarify the error handling for Location#{assign,replace} · whatwg/html@9cbe9b3]]
([TIME[2015-08-30 09:55:05 +09:00]] 版)
<https://github.com/whatwg/html/commit/9cbe9b33bd969ad0590370ad97a3e282226dfd9c>
[17] [CITE@en[Define security around Window, WindowProxy, and Location properly · whatwg/html@acae3df]]
([TIME[2016-03-13 23:39:57 +09:00]] 版)
<https://github.com/whatwg/html/commit/acae3df652b382e9f4f1d1b4dc7e08e2b00df821>