History API이다. window.history)를 그대로 활용한다. 따라서 자바스크립트로 뒤로가기(history.back())와 앞으로 가기(history.forward()), 지정한 위치로 가기(history.go(인덱스))를 모두 사용할 수 있다.history.pushState()와 history.replaceState()이다. pushState
history.pushState({data: 'pushpush'}, 'title을 pushState로', '/pushpush')
history.state로 접근할 수 있다. /pushpush를 주었기 때문에 절대 경로로 처리가 되었다. 만약 그냥 pushpush나 ./pushpush로 줬다면 상대경로로 처리가 된다./pushpush로 되돌아 갈 수도 있다.replaceState
history.replaceState({ data: 'replace' }, 'title을 replaceState로', '/replace');
replaceState는 뒤로가기를 활성화하지 않고 주소만 바꾼다.pushState는 주소 목록에 새로운 주소를 추가한다.popstate
window.addEventListener('popstate', function () {
console.log('popstate', history.state);
document.querySelector('#state').innerHTML = JSON.stringify(history.state);
});
pushState와 replaceState로 주소를 바꾼 후, 뒤로가기나 앞으로가기를 했을 때 발생하는 이벤트가 있다. 바로 popstate 이벤트이다. 예제처럼 윈도우에 이벤트 리스너를 연결해 두면 뒤로가기나 앞으로가기를 눌렀을 때 이벤트가 발생한다. pushState를 여러 번 눌렀다가 뒤로가기를 해보면 #state에 history.state 정보가 뜬다.pushState와 replaceState를 할 때는 이벤트가 발생하지 않는다는 것이다. pushState 또는 replaceState를 한 후, 뒤로가기나 앞으로가기를 눌렀을 때만 발생한다. popstate 이벤트 발생 후 history.state에 접근하면 이전 state를 가져올 수 있다. 따라서 이전 페이지도 그 정보들을 활용해 다시 렌더링할 수 있다.참조: History API