[16] 直列化済み状態 (旧状態オブジェクト) は、利用者インターフェイスの状態を表すオブジェクトです >>15。
[17] 状態オブジェクトは、セッション履歴エントリー中に設定されることがあります。
[18] 著者は pushState
や replaceState
により状態オブジェクトを指定できます。
history.state
属性 (DOM)[22] History
インターフェイスの
state
IDL属性の取得器は、
次のようにしなければなりません >>21。
pushState
メソッド、replaceState
メソッド[29] History
インターフェイスの
pushState
メソッドと
replaceState
メソッドは、
次のようにしなければなりません >>28。
[30] 両メソッドは文書の番地を変更することができるものですが、
文書の起源や実効スクリプト起源や文書のドメインを変更することはできません。
この意味で同一起源ポリシーを緩和するものではありません。更に、
document.domain
を使っても変更可能な範囲を拡大することはできません。
about:blank
や data:
URL が文書の番地となっている時、 http:
や
https:
の URL に変更することはできません。
この意味で同一起源ポリシーより制限が厳しいと言うこともできますが、
両メソッドの趣旨が文書の番地を変更するものですから、当然の制約でもあります。[32] 砂箱によって異なる起源で動作するスクリプトは素片識別子以外を変更することもできません。
[35] 利用者エージェントは、 pushState
の濫用を防ぐため、
タイマーからの呼び出しや利用者の明確な操作によらないイベントリスナーからの呼び出し、短時間での連続呼び出しを無視したほうが良いかもしれません
>>34。
popstate
イベント[40] popstate
イベントは、履歴の探索により
history.state
の値が変更された時に発火されます。
[42] PopStateEvent
インターフェイス >>41 は、
popstate
イベントと共に用いられます。
文書環境とワーカー環境に晒されています >>41。
[44] PopStateEvent
インターフェイスは、
他の Event
インターフェイス同様のコンストラクターを持ちます
>>41。
初期化のための辞書は PopStateEventInit
です >>41。
[43] PopStateEvent
インターフェイスは、
Event
インターフェイスを継承しています >>41。
PopStateEventInit
辞書は、
EventInit
辞書を継承しています >>41。
[45] PopStateEvent
インターフェイスおよび
PopStateEventInit
辞書は、any
型の読み取り専用IDL属性 state
を持ちます >>41。
初期値は null です >>41。履歴の探索で popstate
イベントが発火される時は、状態オブジェクト (なければ null)
が設定されます。
[48] 悪意のある著者が、
利用者の正常な履歴操作を妨害するために
pushState
/popstate
を使うことがあります >>47。
例えば戻るボタンを無効化するための手段として、
あたかも正当な技法のように紹介する悪い人がいます。
[96]
Webブラウザーはそうした悪用を防ぐための対策を講じることができ (>>35)、
利用者を保護することが期待されています。
最近の
Webブラウザーの履歴のインターフェイスは、
複数まとめて戻るような機能が提供されていたりもします。
[97] ブラウザの履歴を操作して「戻る」ボタンで広告を出すやつについて – コーヒーサーバは香炉である, https://blog.maripo.org/2024/08/history-api-abuse/
[98] XユーザーのP-Chanさん: 「ブラウザバック広告実装したことあるけど、技術的に可能なので、断るに断れなかった。 「Evil ですよ!? Evil ですよ!?」と言いながら実装した。 結果、めっちゃ効果あって、みんなやる理由が理解できた。 ブラウザ側で完全に技術的に不可能にして欲しい。」 / X, , https://x.com/p1ch_jp/status/1824039906957737987
[99] 技術者倫理! っていいたいところだけど会社員や下請事業者としての立場もあるし難しいのう... 「みんなやってる」と断りにくさが急激に上がるよねえ。最初にやった奴は犯罪レベルだろ。
[86]
ページをスクロールしていくだけで、
勝手にその位置を表す URL (例えば記事に投稿されたコメントの URL
や、章節を表す URL、全体の URL とパスや素片識別子が違うもの)
に replaceState
で置き換えていくサイトがあります。
この機能は一見便利そうですが、 URL を共有しようとする読者が思っていもいない URL を渡してしまうので、 不便です。やめてほしいです。
[1]
History management for "Ajax" applications - Anne’s Weblog (2007-08-10 19:42:23 +09:00
版) http://annevankesteren.nl/2007/08/ajax-history
(名無しさん 2007-08-10 16:32:50 +00:00)
[2] Re: several messages about pushState() and related ideas (Ian Hickson <ian@...> 著, 版) http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/11643
[3] Web Applications 1.0 r5964 12277 ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5963&to=5964
[4] Manipulating the browser history - MDC ( 版) https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history
[5] [whatwg] Asynchronous history navigation and some inconsistencies ( ( 版)) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-June/036505.html
[6] IRC logs: freenode / #whatwg / 20120629 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20120629
[7] Interview with Ian Hickson, HTML editor | HTML5 Doctor ( ( 版)) http://html5doctor.com/interview-with-ian-hickson-html-editor/
[8] Issue 45361 - chromium - history.pushState does not update http referrer - An open-source project to help move the web forward. - Google Project Hosting ( ( 版)) https://code.google.com/p/chromium/issues/detail?id=45361
[9] Bug 40027 – location.href and outgoing referrer not updated properly by pushState/replaceState ( ( 版)) https://bugs.webkit.org/show_bug.cgi?id=40027
[10] 622088 – XHR referer header is not modified with history.pushState ( ( 版)) https://bugzilla.mozilla.org/show_bug.cgi?id=622088
[11] History (Windows) ( ( 版)) http://msdn.microsoft.com/en-us/library/ie/hh920758(v=vs.85).aspx
[12] [whatwg] Proposal: Allow disabling of default scroll restoration behavior (Majid Valipour 著, 版) https://lists.w3.org/Archives/Public/public-whatwg-archive/2015Mar/0070.html
[13] Customizing Scroll Restoration - Google ドキュメント ( 版) https://docs.google.com/a/chromium.org/document/d/1Tiu8PjvBtNOAgeh6yrs7bOrXxQcavQLiNtRJ_ToLlVM/edit?pli=1#heading=h.j26hb4a80gnf
[14] Re: [whatwg] Proposal: Allow disabling of default scroll restoration behavior (Ian Hickson 著, 版) https://lists.w3.org/Archives/Public/public-whatwg-archive/2015Apr/0075.html
[20] defunkt/jquery-pjax ( ( 版)) https://github.com/defunkt/jquery-pjax
[38] IRC logs: freenode / #whatwg / 20090818 ( 版) http://krijnhoetmer.nl/irc-logs/whatwg/20090818#l-118
[39] [whatwg] history.popstate in Firefox4 ( ( 版)) http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-January/034570.html
[46] Add scroll restoration preference to history traversal · whatwg/html@dd6a34e ( 版) https://github.com/whatwg/html/commit/dd6a34ec3c191ee1968a0fc8d174b4ce3b615916
[49] Fix #521: all URLs can be relative · whatwg/html@e99f0bd ( 版) https://github.com/whatwg/html/commit/e99f0bd112e0216698bf9397b64b3f8064995756
[54] Write structured clone algorithm in terms of ECMAScript · whatwg/html@bfb960c ( 版) https://github.com/whatwg/html/commit/bfb960c938580c95e77365e614218b952f96375b
[55] Editorial: define Event attribute defaults through IDL · whatwg/html@0be0229 ( 版) https://github.com/whatwg/html/commit/0be02299f128cbb7c65a7ce259fdd838fd44a4b5
[56] Make it explicit that user agents can ignore replaceState/pushState · whatwg/html@38139b4 ( 版) https://github.com/whatwg/html/commit/38139b40d9b808c9bc8646df74c5c075ad7584fe
[72] チェンジセット 198687 – WebKit ( 版) https://trac.webkit.org/changeset/198687/
[73] Bug 155901 – Soften push/replaceState frequency restrictions ( 版) https://bugs.webkit.org/show_bug.cgi?id=155901
[74] Rename document's address to URL ( (annevk著, )) https://github.com/whatwg/html/commit/16dd60cfb1cbd4ea3dcacc91f58b368b021ded33
[75] Use USVString for all URLs ( (domenic著, )) https://github.com/whatwg/html/commit/018b983b77b2cd908f6d00100e7e0abe893dd2c3
[76] [giow] (2) Make sure to fire the relevant events on the Window object… ( (Hixie著, )) https://github.com/whatwg/html/commit/afdba55e4ae45f4c9d42c00902da1a0df7381aad
[82] Use relevant settings object for pushState/replaceState URL parsing (domenic著, ) https://github.com/whatwg/html/commit/b568cf93ac374c440e29e01a2619365dde7c45c8
[84] Use the associated document for pushState/replaceState's origin check (domenic著, ) https://github.com/whatwg/html/commit/60f84adcae2d252fc63afa6b65686a4590d28734
[85] PopStateEvent/HashChangeEvent/PageTransitionEvent are Window-only (zcorpan著, ) https://github.com/whatwg/html/commit/dec1a5809e15d29592a66147ce2bed5018121b5f
[88] Breaking: refactor structured clone into serialize/deserialize (domenic著, ) https://github.com/whatwg/html/commit/97d644c97335956610a31e8ad98d1a388c063e84
[89] Serializing and deserializing SharedArrayBuffer (annevk著, ) https://github.com/whatwg/html/commit/b3f8779c76de7718bc970fdbccda18a5164d2f98
[90] Remove more types from document.createEvent() (ayg著, ) https://github.com/whatwg/dom/commit/5a532da58455e55b1e611161b72224d083fee7d4
[91] Make popstate and hashchange events not bubble (foolip著, ) https://github.com/whatwg/html/commit/85e1e724cf09574dba47d5eae689bdb5b7fd6502
[92] Let the popstate and hashchange events not bubble by foolip · Pull Request #3737 · whatwg/html () https://github.com/whatwg/html/pull/3737
[93] document.open() can make a document's URL go out of sync with its history entry · Issue #3885 · whatwg/html () https://github.com/whatwg/html/issues/3885
[94] document.open() simplifications, part 2 by TimothyGu · Pull Request #3946 · whatwg/html () https://github.com/whatwg/html/pull/3946
[95] Editorial: Factor out history.push/replaceState() steps (TimothyGu著, ) https://github.com/whatwg/html/commit/f42dcf0bf2ebf86bc5ca79aecea098a8fed6cf3e
[77] Editorial: Factor out history.push/replaceState() steps (TimothyGu著, ) https://github.com/whatwg/html/commit/f42dcf0bf2ebf86bc5ca79aecea098a8fed6cf3e
[87] リンクをクリックするだけでiOSデバイスが再起動してしまうWebサイト | スラド アップル, https://apple.srad.jp/story/16/01/29/0549256/
pushState
/replaceState
で値が設定されます。