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