/
225.txt
134 lines (97 loc) · 8.68 KB
/
225.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
[2] [DFN[[RUBYB[セッション履歴エントリー]@en[session history entry]]]]は、
[[セッション履歴]]中の[[エントリー]]です。
* 仕様書
[REFS[
- [23] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#browsing-context>
- [1] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#session-history-entry>'''
- [21] [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>
- [24] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#session-history>
]REFS]
* 状態
[4] [[セッション履歴エントリー]]は、次のものから構成されます。
[FIG(list members)[
:[[URL]] (必須) [SRC[>>1]]:[[資源]]の [[URL]] です。
:[RUBYB[[[状態オブジェクト]]]@en[state object]]:
[[利用者インターフェイス]]の状態を表すオブジェクト [SRC[>>1]]。
:[RUBYB[題名]@en[title]]:
[[文書]]のその時点での状態を説明するもの ([[利用者]]が履歴上で [[navigate]]
するためのもの)。 [SRC[>>1]]
:[CODE(DOMi)@en[[[Document]]]] オブジェクト [SRC[>>1]]:[[資源]]の[[文書]]です。
:初期文書かどうか:[[初期「[CODE(URI)@en[about:blank]]」文書]]かどうかを表します。
[[navigate]] などの際に用いられます。
:[[要求メソッド]]その他 [[navigate]] の引数:本[[セッション履歴エントリー]]を作成した [[navigate]] の[[引数]] ([[URL]] 以外)。
[[原始閲覧文脈]]や [[fetch]] の[[引数]]など、[[履歴の探索]]で再度 [[navigate]] するために使います。
[CODE(DOMm)@en[[[replaceState]]]]/[CODE(DOMm)@en[[[pushState]]]] で変更されることがあります。
:[[時刻]]:作成時刻。[[結合セッション履歴]]における[[エントリー]]の[[整列]]に用いられます。
:[[閲覧文脈]]:本[[セッション履歴エントリー]]を持つ[[セッション履歴]]を持つ[[閲覧文脈]]。
:[[閲覧文脈名]]:[[履歴の探索]]で読み書きされます。
:[[フォームデータ]] [SRC[>>1]]:
:[[スクロール位置]] [SRC[>>1]]:
:その他:その他の情報も含められます [SRC[>>1]]。
]FIG]
@@ [CITE@en[Web Animations]] ([TIME[2015-06-18 15:58:27 +09:00]] 版) <http://w3c.github.io/web-animations/#interaction-with-page-display>
[9] [[利用者エージェント]]定義の状態を持つ[[エントリー]]を[DFN[[RUBYB[持続的利用者状態付きエントリー]@en[an entry with persisted user state]]]]といいます
[SRC[>>1]]。[[利用者エージェント]]定義の状態には、[[フォームデータ]]、
[[スクロール位置]]その他が含まれます [SRC[>>1]]。
;; [CODE(DOMm)@en[[[pushState]]]] を参照。
;; [20] [[セッション履歴エントリー]]の構成や、エントリー作成・変更時の値の詳細は、
[[HTML Standard]] では規定されておらず、ほぼ[[利用者エージェント]]に任されているようです。
[22] [[履歴の探索]]や [CODE(DOMm)@en[[[pushState]]]]
では、[[セッション履歴エントリー]]を構成する各状態が更新されることがあります。
([[セッション履歴エントリー]]の[[文書]]については次章を参照。)
[8] [[セッション履歴エントリー]]は、[[セッション履歴]]の[[現在エントリー]]である場合があります。
* セッション履歴エントリー、閲覧文脈、文書の関係
[25] [[閲覧文脈]]は、[[文書]]を[[利用者]]に[RUBYB[示す]@en[present]]ものです [SRC[>>23]]。
[[閲覧文脈]]は、[[セッション履歴]]を持ちます [SRC[>>23]]。[[セッション履歴]]は、
その[[閲覧文脈]]において過去、現在、未来に示される
[CODE(DOMi)@en[[[Document]]]] [[オブジェクト]]の[[リスト]]です [SRC[>>23, >>24]]。
[[閲覧文脈]]は、その各[[文書]]に対して[[強い参照]]を持ちます [SRC[>>21]]。
[27] ある時点においては、[[閲覧文脈]]にはいずれか1つの[[文書]]が示されており、
これを[[活性文書]]といいます [SRC[>>23]]。[[セッション履歴]]のうち、
いずれか1つが[[現在エントリー]]となります。[[履歴の探索]]の途中の
([[スクリプト]]からは観測できない) 状態を除き、[[現在エントリー]]の[[文書]]が[[活性文書]]です。
[26] 厳密には[[セッション履歴]]は[[セッション履歴エントリー]]のリストです。
[[セッション履歴エントリー]]は[[文書]]を保持していますが、それ以外の情報も保持しています。
複数の[[セッション履歴エントリー]]の[[文書]]が同じ[[文書]]である場合もあります
[SRC[>>1]]。
[EG[
[11] [[状態オブジェクト]]付きの[[エントリー]]が作成された場合や、
[[素片識別子へのスクロール]]のみの [[navigate]] が行われた場合に、
同じ[[文書]]を共有する[[セッション履歴エントリー]]が作成されます [SRC[>>1]]。
]EG]
;; [12] 同じ[[文書]]となることがあるのは、隣接する[[セッション履歴エントリー]]のみです [SRC[>>1]]。
;; [16] 同じ [[URL]] であっても[[セッション履歴エントリー]]の[[文書]]が同じとは限りません。
また異なる[[セッション履歴]]に属する[[エントリー]]の[[文書]]は同じにはなりません。
[18] [[利用者エージェント]]は、ページごとに追加できる[[状態オブジェクト]]数に上限を設けて構いません [SRC[>>1]]。
つまり同じ[[文書]]を保持する[[セッション履歴エントリー]]の個数に上限を設けることができます。
上限に達したら、[[状態オブジェクト]]を持つ最古のもの (= 同じ[[文書]]を持つ、[[索引]]の小さい方から2番目のもの)
から削除していきます。
;; [CODE(DOMm)@en[[[pushState]]]] を参照。
[28] [[文書]]から[[閲覧文脈]]へも、[[強い参照]]があります [SRC[>>21]]。
[6] [[文書]]が[[完全に活性]]でなければ、[[資源]]を解放するために捨てて構いません [SRC[>>1]]。
また[[閲覧文脈を捨てる]]と、[[閲覧文脈]]の[[セッション履歴]]のすべての[[セッション履歴エントリー]]の[[文書]]について、[[文書を捨てる]]こととなります [SRC[>>21]]。
;; [[文書を捨てる]]、[[閲覧文脈を捨てる]]、[[bfcache]] を参照。
[5] [[文書を捨てる]]と、[DFN[[[閲覧文脈から文書への強い参照を破棄]]]]されます [SRC[>>21]]。
[10] [CODE(JS)@en[[[document.open]]]] では、[[文書]]を意図的に未設定状態にした[[セッション履歴エントリー]]が作られることがあります。
[14] [[文書]]が捨てられた場合、[[履歴の探索]]で再度必要になった時点で、
[[エントリー更新]]の [[navigate]] により改めて[[文書]]が作られます。
元々同じ[[文書]]を共有していたすべての[[セッション履歴エントリー]]がその新しい[[文書]]を共有します [SRC[>>1]]。
;; [[bfcache]] や [[navigate]] を参照。
;; [7] [[閲覧文脈]]から[[文書]]への[[強い参照]]が破棄される (= [[セッション履歴エントリー]]の[[文書]]が捨てられる) としても、
どの[[セッション履歴エントリー]]が同じ[[文書]]を参照していたかの情報は、
保持し続ける必要があります。
[30] [[Webブラウザー]]組み込みの[[フィードビューアー]]への [[navigate]] やエラー画面への
[[navigate]] などにより、[[閲覧文脈]]が[[文書]]以外を表示する状態になることもあります。
もっとも、その場合でも (ダミーの) [[文書]]は存在しています。
;; [[navigate]] を参照。
* 文脈
[3] [[セッション履歴]]は、[[セッション履歴エントリー]]によって構成されるリストです [SRC[>>1]]。
[[セッション履歴]]の[[現在エントリー]]は、そのうちのいずれかの[[エントリー]]です。
[15] [[結合セッション履歴]]は、[[セッション履歴エントリー]]によって構成されるリストです。
[13] [[文書]]の[[最新エントリー]]は、[[セッション履歴エントリー]]です。
* レンダリング
[19] [[履歴]]を参照。
* メモ
[17] [CITE[history.back()の入力データ保持について #HTML - Qiita]]
( ([TIME[2013-03-13 01:44:48 +09:00]] 版))
<http://qiita.com/items/c2de591b4eaff59d3e07>