SYNCERのロゴ
アイキャッチ画像

History.pushState() - 履歴エントリーを追加する

pushState()は、Historyのメソッドです。現在位置の次に、履歴エントリーを1つ追加して移動します。元々あった現在位置の次以降の履歴エントリーは失われます。履歴エントリーの位置とアドレスが変わりますが、http通信は発生しません。

概要

名前
pushState
所属
History
IDL
void pushState(any data, DOMString title, optional USVString? url = null);
仕様書
https://html.spec.whatwg.org/multipage/history.html#dom-history-pushstate

説明

第1引数(state)には、追加する履歴エントリーに紐付けるデータを指定します。型は問われません。このデータは、その履歴エントリーにおいてstateを参照して取得できます。

第2引数(title)には、追加する履歴エントリーのタイトルを指定します。title要素に反映されるかもしれません。

第3引数(url)には、追加する履歴エントリーのURLアドレスを指定します。http通信は発生しません。違うオリジンのURLアドレスは指定できません。

デモ

History.pushState()のデモです。このデモは新しくウィンドウを開いた方が分かりやすいと思います。メソッドを実行すると、new.htmlというURLアドレスの履歴エントリーを追加してそこに移動します。このnew.htmlのURLアドレス(新しい履歴エントリー)に移動したら、そこでリフレッシュ更新をしてみて下さい。new.htmlのファイルが存在しないので、404 Not Foundになってしまいます。pushState()は履歴エントリーを追加してURLアドレスを新しくするけどhttp通信は発生しない、という意味が分かると思います。

<!DOCTYPE html>
<html>
<head>
<title>History.pushState()のデモ</title>
<style>
body { word-break: break-all ; }

div#result {
	white-space: pre-wrap ;
}
</style>
</head>
<body>
<p><a href="./demo.html" target="_blank">デモを新しいウィンドウで開く</a></p>
<hr>
<p id="location"></p>
<hr>
<p><button id="pushState">追加 [pushState()]</button></p>
<hr>
<div id="result"></div>
<script>
var locationElement = document.getElementById( "location" ) ;
var resultElement = document.getElementById( "result" ) ;

function getHistoryInfo () {
	console.log( history ) ;

	locationElement.textContent = location.href ;

	resultElement.textContent = "" ;
	resultElement.textContent += "length: " + history.length + "\n" ;
}

onpopstate = getHistoryInfo ;
getHistoryInfo() ;

document.getElementById( "pushState" ).onclick = function () {
	history.pushState( "hoge", "新しく追加された履歴エントリー", "./new.html" ) ;
	getHistoryInfo() ;
} ;
</script>

</body>
</html>

サポート状況

ChromeFirefoxSafariEdgeIEOperaiOS SafariAndroid
5.1+ 10+ 11.6+
  • Twitterでシェア
  • Facebookでシェア
  • Google+でシェア
  • はてなブックマークでシェア
  • pocketに保存
  • LINEでシェア
更新履歴
2017年10月5日 (木)
コンテンツを公開しました。