[9] [[Webブラウザー]]の[[閲覧文脈]]は、 [[navigate]] により次々と
[[Webページ]]の遷移を行ったり、[[スクリプト]]によって
[[Webページ]]内での状態を変化させたりして変化してゆきます。
こうした変化の各段階を記録したものを[DFN[[RUBYB[履歴]@en[history]]]]といいます。

* 仕様書

[REFS[
- [1] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#history-notes>
]REFS]

* 履歴に関する概念

[16] 
[FIG(list short)[
- [[セッション履歴]]
- [[結合セッション履歴]]
- [[セッション履歴イベントループ]]
- [[セッション履歴探索キュー]]
- [[履歴の探索]]
- [CODE(DOMi)@en[[[History]]]]
-- [CODE(DOMm)@en[pushState]]
-- [CODE(DOMm)@en[popState]]
- [CODE(DOMm)@en[location.reload]]
- [[bfcache]]
- [[Pjax]]
- [CODE(DOMe)@en[[[hashchange]]]]
- [CODE(DOMe)@en[popstate]]
- [[初期[CODE(URI)@en[about:blank]]文書]]
- [CODE(CSS)@en[:visited]]
- [[既読化]]
]FIG]

* 利用者インターフェイス

[5] 多くの [[Webブラウザー]]は[[履歴]]上を「[[戻る]]」、「[[進む]]」
といった操作を[[利用者インターフェイス]]で提供しています。
1段階だけではなく、[[メニュー]]などを提示して複数段階移動することができる
[[Webブラウザー]]もあります。こうした移動は ⊿ 付きの[[履歴の探索]]操作として扱われます。

;; [7] [[メニューバー]]上のボタンとして実装される場合の他、
[[鍵盤]]やハードウェア上の専用のボタンが提供されている場合もあります。
また[[キーボードショートカット]]や[[マウスジェスチャー]]が割り当てられている場合もあります。
([[マウス操作]]、[[鍵盤操作]]も参照。)

[2] [CODE(DOMi)@en[[[History]]]] [[インターフェイス]]の仕様は、
[[セッション履歴]]をどう[[利用者]]に提示するか制限するものではありません [SRC[>>1]]。

[3] [[navigate]] や [CODE(DOMi)@en[[[History]]]] の操作は[[セッション履歴]]を編集することがありますが、
これは必ずしもその通りに[[利用者]]に示さなければならないわけではない [SRC[[[HTML Standard]]]]
とされています。

[EG[
[4] 仕様上は[[セッション履歴]]は[[線形]]のリストとなっていますが、
「進む」が分岐する[[木構造]]で表示することもできます [SRC[>>1]]。
]EG]

[8] [[著者]]が [CODE(DOMm)@en[[[pushState]]]] を濫用した場合のため、
複数段階移動するためのメニューに[[状態オブジェクト]]が異なり[[文書]]が異ならない[[エントリー]]への移動を表示しなかったり、
[[状態オブジェクト]]のみ異なる移動と [[URL]] が異なる移動で2種類の移動操作を提供したりすることも考えられます [SRC[>>1]]。

[18] 
[CODE[replaceState]] が乱用された場合 (開発者の能力不足により不適切に使われている場合を含みます。 [SEE[ [[国立国会図書館デジタルコレクション]] ]])
に備え、
[[Webブラウザー]]は [CODE[replaceState]] で上書きされた[[セッション履歴]]上の [[URL]]
に[[利用者]]がアクセスする手段を提供するべきでしょう。

-*-*-

[19] 
多くの [[Webブラウザー]]は、 [[Webブラウザー]]の[[プログラム]] ([[プロセス]]) 
を一旦終了した場合であっても、次に起動したときに前の[[セッション履歴]]の全体を復元する機能を実装しています。
[[平成時代]]の中頃から実装されるようになり、今では当然の機能になっています。

[20] 
[[セッション履歴]]の復元は、[[Webブラウザー]]の[[プロセス]]の一部又は全部が不意に[[強制終了]]させられた場合であっても機能するべきです。
現在の多くの[[Webブラウザー]]はクラッシュ対策でそのような機能を備えています。

;; [21] [[Firefox]] は有無を言わさず復元します。 [[Chrome]]
は復元するかどうかを尋ねる[[ポップアップ]]を表示します。
[[Firefox]] の方が便利に思われます。 [[Chrome]] 
は再クラッシュを懸念してそのようにしているのでしょうか。
うっかり履歴を喪失するリスクの方が大きく好ましからざる[[UI]]のように思われます。
[TIME[2025-03-03T10:04:24.500Z]]


[22] このような復元機能は、 
標準的な[[セッション履歴]]以外の >>18 のような履歴機能も含めて復元するべきです。

[23] 
最近の [[Chrome]] は行き過ぎた [[HTTPS化]]が酷いです。
[[素のHTTP]]で開いていた頁が[[Webブラウザー]]の再起動後に勝手に
[[HTTPS]]
に切り替わっていたりします。
[TIME[2025-03-10T13:49:14.900Z]]


-*-*-

[6] 多くの [[Webブラウザー]]は、[[セッション履歴]]とは別に、(セッションに関わらず)
最近表示したページの一覧を表示する機能を実装しています。そうした一覧からの移動は、
[[セッション履歴]]の移動ではなく新たな [[navigate]] として実装されているのが普通です。

* メモ

[10] [CITE[Using Graphic History in Browsing the World Wide Web]] <http://www.w3.org/Conferences/WWW4/Papers2/270/>

[11] [CITE[Graphical History - Torisugari の日記]] <http://slashdot.jp/~Torisugari/journal/357506?from=rss>
([[名無しさん]] [WEAK[2006-11-18 02:32:41 +00:00]])

[12] [CITE[Graphical History その2 - Torisugari の日記]] <http://slashdot.jp/~Torisugari/journal/357584?from=rss>
([[名無しさん]] [WEAK[2006-11-18 02:32:59 +00:00]])

[13] [[w3m]] にも同様の機能が・・・

[14] [[w3m]] ではなく [[emacs-w3m]] でしたか?


[15] [CITE[chrome.history - Google Chrome]]
( ([TIME[2016-06-18 12:16:48 +09:00]]))
<https://developer.chrome.com/extensions/history>


[17] 
[[Firefox]] の履歴一覧表示ウィンドウは表示順で整列されていて、
履歴から開き直すとその項目が今日の最新のところに移動してしまいます。
これがすごく使いにくい。履歴を遡って目的のページを探したいときにいちいち順番が入れ替わって選んだページ = 最後に表示されたページにスクロールしてしまう。

メニューにはこの挙動をオフにする項目がちゃんと用意されています。
なぜこの困った挙動の方がデフォルトなのかが謎。

