<目次>
(1) JavaScriptのhistory.pushState()とは?
(1-1) 概要
(1-2) 構文
(1-3) サンプルプログラム
(1-4) 使いどころ
(1) JavaScriptのhistory.pushState()とは?
(1-1) 概要
history.pushState()メソッドを使うと、ブラウザのセッション履歴に狙ったレコードを追加する事ができます。pushState()メソッド自体の挙動としては、ブラウザのアドレスバーに出ているURLを「書き換え」しつつ、表示されているページはそのまま残す、という動きになります。
(1-2) 構文
(構文)
history.pushState(state, title [, url])
(構文説明)
引数名 | 必須/任意 | 説明 |
state | 必須 | 履歴レコードとセットで生成されるJavaScriptのオブジェクトです。セット&取得はそれぞれ次のように実施できます。 ●セット例 const state = { ‘user_id’ : ‘A001’, ‘user_name’ : ‘Rainbow’ } ●取得例 セットしたstateオブジェクトの取り出しは次のように行えます。 var tmp = history.state; |
title | 必須 | 理論上はブラウザのタブのタイトルを変更しますが、2021年3月時点では殆どのブラウザでこの「title」引数を無視しているようです。
そのため、実質的に利用されるのは「url」引数を使ったアドレスバーのURL書き換えのみで、その用途で使う際の「title」引数はnullで利用されるケースが多いです。 |
url | 任意 | アドレスバーのURLの変更後の値を指定します。
pushState()メソッドを実行後、ブラウザのアドレスバーはこのURLに指定した値に書き換わります。 |
(1-3) サンプルプログラム
●JavaScript
function PushStateTest(){ //# history.pushStateの挙動確認① const state = { 'user_id' : 'A0001','user_name' : 'Rainbow' } const title = "" const url = './IT0xxx_JsHistoryPushState_AFTER.jsp' history.pushState(state,title,url) //# 第一引数(state)の取得・利用例 var tmp = history.state; console.log(tmp); }
●JSP
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="js/IT0xxx_JsHistoryPushState_syntax.js" type="text/javascript" charset="UTF-8"></script> <title>JavaScript history.pushState Test</title> </head> <body> <h2>■history.pushStateの挙動確認①</h2> <input type="button" value="PushStateテスト実行" onclick="PushStateTest()"> </body> </html>
・stateでセットしたオブジェクトが正しくコンソールに表示されている
(1-4) 使いどころ
●利用シーン
(図142)AFTER
●利用シーンのソースコード
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JavaScript history.pushState Test</title> </head> <body> <h2>■history.pushStateの挙動確認②</h2> <form method="POST" action="IT0xxx_JsHistoryPushState_SERVLET" name="Forward1"> <input type="text" name="field1" /> <br /> <br /> <input type="submit" value="Go To IT0xxx_JsHistoryPushState_SERVLET"/> </form> </body> </html>
import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/IT0xxx_JsHistoryPushState_SERVLET") public class IT0xxx_JsHistoryPushState extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nextPage = "/IT0xxx_JsHistoryPushState_AFTER.jsp"; RequestDispatcher rd = getServletContext().getRequestDispatcher(nextPage); rd.forward(request, response); } }
$(function (){ //# history.pushStateの挙動確認① const state = { 'user_id' : 'A0001','user_name' : 'Rainbow' } const title = "" const url = './IT0xxx_JsHistoryPushState_AFTER.jsp' history.pushState(state,title,url) //# 第一引数(state)の取得・利用例 var tmp = history.state; console.log(tmp); });
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="https://code.jquery.com/jquery-1.10.2.js" type="text/javascript"></script> <script src="js/IT0xxx_JsHistoryPushStateTest.js" type="text/javascript" charset="UTF-8"></script> <title>JavaScript history.pushState Test</title> </head> <body> <h2>■history.pushStateの挙動確認②</h2> <div> Input Value = <%=request.getParameter("field1") %> </div> <br /> <a href="IT0xxx_JsHistoryPushState.jsp" >→ Back To IT0xxx_JsHistoryPushState.jsp.jsp</a> </body> </html>