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