[8] History
インターフェイスの
go
メソッドは、
結合セッション履歴上の移動を求めるものです。
back
メソッドは前に1つ、
forward
メソッドは先に1つ、
それぞれ移動を求めるものです。
[40] 履歴の探索は、 セッション履歴における移動を行う仕様書上の操作です。
[2] History
インターフェイスの
go
メソッドは、次のようにしなければなりません
>>1。
[14] History
インターフェイスの
back
メソッドは、
次のようにしなければなりません
>>12。
SecurityError
DOMException
を投げ、
ここで停止します。[17] History
インターフェイスの
forward
メソッドは、
次のようにしなければなりません
>>13。
SecurityError
DOMException
を投げ、
ここで停止します。[39] navigate は、最終的に履歴の探索を呼び出します。
[36] 普通、 Webブラウザーにはツールバーや文脈メニュー等で 「戻る」 や 「進む」 の機能が実装されています。直前や直後だけでなく、 結合セッション履歴上の離れた位置に移動できるものもあります。
[37] pushState
の濫用を防ぐため、
直前ではなく前のページ (異なる文書のエントリー) に移動する方法をも提供するべきかもしれません
>>11。
[116] Webブラウザーによっては起源やサイトの境界をヒントに、 利用者が戻りたいであろうところに戻りやすい工夫をしています。
[35] 利用者が利用者インターフェイスからある閲覧文脈の履歴上の移動を指示した場合、 適切な ⊿ と当該閲覧文脈について、 traverse the history by a delta しなければなりません >>21。
[22] traverse the history by a delta は、 ⊿、 始点閲覧文脈について、 次のようにします。 >>21
[118] ここで追加するタスクは、 次のようにします。 >>21
[41] セッション履歴エントリーエントリー、 置換有効フラグ、 non-blocking events フラグ、 reload-triggered navigation フラグ、 履歴ナビゲーションフラグについて履歴を探索するには、 次のようにします >>42。
pushState
/replaceState
が設定していないなら
(= 状態オブジェクトが存在し、題名が存在しないなら)、document.title
の値とします。off
のフォーム制御子があれば、その再設定アルゴリズムを呼び出します。complete
なら、次のようなタスクをキューに追加します。StructuredDesrialize (エントリーの直列化済み状態, 現在Realm記録)
に設定します。
例外が投げられたら、
state を、 null
に設定します。History
オブジェクトの history.state
を state に設定します。webNavigation
API の onHistoryStateUpdated
を呼び出します。
遷移型と遷移修飾子群は適宜設定します。現在時刻も引き渡します。dir
属性の値を変更することになるかもしれません >>42。ということは mutation observer が呼び出されることになるかもしれません。[48] 履歴に関するいくつかの操作と navigate には、 置換有効フラグがあります。 いくつかのメソッドはこのフラグを引数として指定できるほか、 このフラグに相当する2つのメソッドが用意されていることもあります。 いずれにせよ、履歴上で現在エントリーを置換して新しいセッション履歴エントリーとするべきか、現在エントリーの次のエントリーとするべきかを示すものです。
document.open
以外では、最終的に >>49 に行き着きます。[55] window.open
には「新しい」
フラグがあって、 navigate の置換有効フラグとして使われるとともに、
初期「about:blank
」文書に関する分岐にも使われます。
[50] navigate/構文解析の最終段階である stops parsing で completely loaded フラグが設定されるまでは、基本的には置換有効フラグが自動的に設定されます。
location.href
への代入などの JavaScript
によるクライアント側のリダイレクトが行われた時に、リダイレクトページを履歴から除去するためのものです。
JavaScript 実装初期の Webブラウザーはこの処理をしていなかったため、
利用者が戻る操作を行った時にリダイレクトページに戻り、
直ちに自動的にリダイレクトされてしまい不便でした。[51] 初期「about:blank
」文書から最初の文書への
navigate でも、基本的に置換有効フラグが設定されます。そのため利用者や著者が想定していない空ページは履歴に現れなくなります。
[9] history.go
はあまり使われません。
結合セッション履歴上の他のエントリーの内容をスクリプトから調べることはできませんし、
入れ子閲覧文脈や Pjax を考慮して移動数をスクリプトから推測することも困難なので、
本メソッドは実用的ではありません。
[20] history.back
はしばしば「前のページに戻る」リンク・ボタンの実装に使われています。
著者としては簡単に実現できるメリットがありますが、
利用者としては検索エンジンなど外部サイトから当該ページを表示した時に著者が想定していたであろうサイト内動線上の「前」のページを知ることができず、
不便であると批判もされています。
[59] history.go
, history.back
,
history.forward
は JavaScript 1.0 で追加されました。
[10] IRC logs: freenode / #whatwg / 20130923 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20130923
[56] Make history.go() default to 0 · whatwg/html@a098b12 ( 版) https://github.com/whatwg/html/commit/a098b126b19733c74e60d302f0089b9064b8f77b
[67] Move scroll position restoration after popstate ( (domenic著, )) https://github.com/whatwg/html/commit/98895af2179ad879da9fa57983ab9589251f7950
[70] Editorial: clean up "traverse the history" (annevk著, ) https://github.com/whatwg/html/commit/b9c90431ad4c8aa583aee1691a6a1bd355b68b53
[71] Set current entry earlier in "traverse the history" (annevk著, ) https://github.com/whatwg/html/commit/dd2166c88e6e01439fcfefb03817184cd5b116dc
[74] Remove the "replace" argument to window.open() (domenic著, ) https://github.com/whatwg/html/commit/f444d452cb062ba848570c7b69e6cfcf8aac5c62
[75] 368366 – page that is javascript redirected never appears in history ( ()) https://bugzilla.mozilla.org/show_bug.cgi?id=368366
[76] 754029 – Navigating from a new script tag does not add a session history entry ( ()) https://bugzilla.mozilla.org/show_bug.cgi?id=754029
[77] 17041 – Setting location before the page is done loading shouldn't always be a replace load ( ()) https://www.w3.org/Bugs/Public/show_bug.cgi?id=17041
[81] Breaking: refactor structured clone into serialize/deserialize (domenic著, ) https://github.com/whatwg/html/commit/97d644c97335956610a31e8ad98d1a388c063e84
[82] Centralize setting the active document (annevk著, ) https://github.com/whatwg/html/commit/4257a9bf03f8ebbd6cc8b41933b6c5b619611662
[83] Fragment navigation should use replacement enabled (annevk著, ) https://github.com/whatwg/html/commit/cf02423dc52686d084a3191833d939919b5907fd
[84] Q:
<form><input type="image" src="back.jpg" onclick="history.back()"></form>... はどうなるでしょう。
[85] Editorial: make traverse the history pass a request to navigate (yutakahirano著, ) https://github.com/whatwg/html/commit/cc12390b34dcbe0d06f345e55e87b9e7ffca48c5
[89] Pass a request, rather than URL, to Navigate algorithm by yutakahirano · Pull Request #3642 · whatwg/html () https://github.com/whatwg/html/pull/3642
[90] Set request's reload-navigation flag for reloads (yutakahirano著, ) https://github.com/whatwg/html/commit/3072f1d71fc66c792412e1f5785f047f637545b9
[92] Set request's reload-navigation flag when the navigation is reload-trigerred by yutakahirano · Pull Request #3592 · whatwg/html () https://github.com/whatwg/html/pull/3592
[93] Set request's reload-navigation flag when the navigation is reload-trigerred by yutakahirano · Pull Request #3592 · whatwg/html () https://github.com/whatwg/html/pull/3592
[94] Proposal: FetchEvent.navigationLoadType · Issue #1167 · w3c/ServiceWorker () https://github.com/w3c/ServiceWorker/issues/1167
[95] Make popstate and hashchange events not bubble (foolip著, ) https://github.com/whatwg/html/commit/85e1e724cf09574dba47d5eae689bdb5b7fd6502
[96] Set request's history-navigation flag for history traversal (yutakahirano著, ) https://github.com/whatwg/html/commit/437ae8e13bd1b27b951567905e192f78924819d5
[98] Proposal: FetchEvent.navigationLoadType · Issue #1167 · w3c/ServiceWorker () https://github.com/w3c/ServiceWorker/issues/1167
[99] Set request's history-navigation flag for history traversal by yutakahirano · Pull Request #3674 · whatwg/html () https://github.com/whatwg/html/pull/3674
[100] Add Request's isHistoryNavigation (yutakahirano著, ) https://github.com/whatwg/fetch/commit/bd9b4e3d14520a41e5c49f3ec9c9c6de0035ce07
[104] Add Request's isHistoryNavigation by yutakahirano · Pull Request #718 · whatwg/fetch () https://github.com/whatwg/fetch/pull/718
[105] document.open() simplifications, part 1 (TimothyGu著, ) https://github.com/whatwg/html/commit/6f769b8089a843066aa19f5991405bf4c84458b3
[106] At least Blink does not support document.open()'s replace parameter · Issue #3564 · whatwg/html () https://github.com/whatwg/html/issues/3564
[107] Remove overridden reload concept (TimothyGu著, ) https://github.com/whatwg/html/commit/6440ccae7340ea41d3eb5bf8ff0b3b27363eda85
[108] Explicitly prevent sandboxed navigation via History (dtapuska著, ) https://github.com/whatwg/html/commit/2dafc5396632b1f9831f704f35d13d70194db484
[121] <iframe> and the History API · Issue #184 · w3c/webcomponents · GitHub () https://github.com/w3c/webcomponents/issues/184
[122] 27325 – [Shadow]: Figure out how session history should work for <iframe>s in shadow DOM () https://www.w3.org/Bugs/Public/show_bug.cgi?id=27325
[123] Explicitly prevent sandboxed navigation in the history interface. by dtapuska · Pull Request #4787 · whatwg/html · GitHub () https://github.com/whatwg/html/pull/4787