-
Notifications
You must be signed in to change notification settings - Fork 4
/
224.txt
101 lines (73 loc) · 5.95 KB
/
224.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
[3] [DFN[[RUBYB[[[セッション履歴]]]@en[session history]]]]は、
ある[[閲覧文脈]]中の[[文書]]の列です [SRC[>>2]]。
* 仕様書
[REFS[
- [1] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#browsing-context>
- [2] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#session-history>'''
- [28] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#dom-history-pushstate>
- [20] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#update-the-session-history-with-the-new-page>
- [19] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#scroll-to-fragid>
- [10] [CITE@en[RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching]] ([TIME[2014-09-11 10:19:59 +09:00]] 版) <https://tools.ietf.org/html/rfc7234#section-6>
]REFS]
* 閲覧文脈とセッション履歴
[8] 各[[閲覧文脈]]は[[セッション履歴]]を1つ持ちます [SRC[>>1, >>2]]。[[セッション履歴]]は、
その[[閲覧文脈]]で過去、現在、未来に於いて[RUBYB[提示される]@en[presented]]
[CODE(DOMi)@en[[[Document]]]] [[オブジェクト]]の[[リスト]]です [SRC[>>1]]。
[[セッション履歴]]は、[[閲覧文脈の作成]]と同時に作成されます。
;; [4] [[最上位閲覧文脈]]も[[入れ子閲覧文脈]]も、それぞれ1つずつ[[セッション履歴]]を持ちます。
[5] [[セッション履歴]]は、[[セッション履歴エントリー]]の平坦なリストです [SRC[>>2]]。
[7] [[セッション履歴]]に含まれる[[セッション履歴エントリー]]のいずれか丁度1つは、
[[現在エントリー]]となります。
[21] [[セッション履歴]]は、必ず1つ以上の[[セッション履歴エントリー]]を持ちます。
空の[[セッション履歴]]は存在しません。[[閲覧文脈の作成]]時には、
[[初期「[CODE(URI)@en[about:blank]]」文書]]が自動的に作成されます。
[17] [[セッション履歴エントリー]]には[[文書]]が関連付けられています。
複数の[[セッション履歴エントリー]]が同じ[[文書]]を共有する場合があり、
そのような[[エントリー]]は[[セッション履歴]]上で連続しています。
;; [[セッション履歴エントリー]]を参照。
[18] 同じ[[文書]]を共有する[[セッション履歴エントリー]]が複数ある場合、
最後のものが[[文書]]の[[最新エントリー]]となります。
同じ[[文書]]を共有する[[セッション履歴エントリー]]の個数には、
[[利用者エージェント]]依存の上限が設定されていることがあります。
;; [CODE(DOMm)@en[[[pushState]]]] を参照。
[6] [CODE(DOMi)@en[[[History]]]] [[オブジェクト]]は、[[セッション履歴]]を表しています。
[CODE(DOMi)@en[[[History]]]] [[オブジェクト]]は [CODE(DOMi)@en[[[Document]]]]
ごとに存在しています。
;; [CODE(DOMi)@en[[[History]]]] を参照。
[12] 次の場面で[[セッション履歴]]の操作が行われます。
[FIG(short list)[
- [[navigate]]
- [CODE(DOMm)@en[[[pushState]]]]/[CODE(DOMm)@en[[[replaceState]]]]
- [[履歴の探索]]
- [CODE(JS)@en[[[document.open]]]]
]FIG]
* セッション履歴エントリーの挿入
[13] [[セッション履歴]]に[[セッション履歴エントリー]]を挿入する操作は、
次のように行わなければ[['''なりません''']] [SRC[>>28, >>19, >>20]]。
[FIG(steps)[
= [14] [[セッション履歴]]の[[エントリー]]のうち、[[現在エントリー]]よりも後のものを
(あれば) 削除します。 ([[現在エントリー]]は含みません。)
= [15] [[セッション履歴]]の[[閲覧文脈]]の[[最上位閲覧文脈]]の[[文書族]]の[[文書]]に関連付けられた[[履歴探索タスク源]]の[[タスク]]を (あれば) [[タスクキュー]]から削除します。
= [16] [[セッション履歴]]の最後に新しい[[エントリー]]を追加します。
]FIG]
;; [22] [[navigate]] で新しい[[文書]]に移動する場合 [SRC[>>20]]
には[[タスクキュー]]からの削除 (>>15) は行われませんが、
直後の[[履歴の探索]]内で結局削除が行われますから、同じこととなります。
;; [23] [CODE(JS)@en[[[document.open]]]] では少し違ったものが実行されます。
* セッション履歴エントリーの削除
[24] 挿入時にある位置から後の[[セッション履歴エントリー]]がすべて削除されることがあります (>>13)。
[26] [[履歴の探索]]である[[セッション履歴エントリー]]が[[セッション履歴]]から削除されることがあります。
[25] [CODE(JS)@en[[[document.open]]]] によって同じ[[文書]]を持つ[[セッション履歴エントリー]]がまとめて削除されることがあります。
* 関連
[9] [[結合セッション履歴]]は、複数の[[セッション履歴]]をまとめたものです。
[11] [[HTTPキャッシュ]]においては[[新鮮寿命]]などの規定がありますが、
これは必ずしも[[履歴]]に適用されるものではありません [SRC[>>10]]。
[[履歴]]を戻って[[腐敗応答]]を[[表示]]しても何ら問題ありません。
逆に[[腐敗]]していることを[[利用者]]に[[表示]]したり、
[CODE(HTTP)@en[[[Cache-Control:]] [[no-store]]]] に従ったりしても構いません。
[27] [CITE@en[<iframe> and the History API · Issue #184 · w3c/webcomponents]]
( ([TIME[2016-06-21 11:13:02 +09:00]]))
<https://github.com/w3c/webcomponents/issues/184>
[29] [CITE@en[cbrewster/ServoNavigation: Proposal for Servo Navigation]]
([TIME[2017-05-09 13:02:58 +09:00]])
<https://github.com/cbrewster/ServoNavigation>