2023 08 10
2023-08-10¶
History API¶
참고: https://www.youtube.com/watch?v=Y1eHAE7D7s8
- back(), forward(), go()
- 히스토리 스택을 조작
back()- 뒤로가기
forward()- 앞으로가기
go()- 매개변수 만큼 왔다갔다, 마이너스 뒤로 플러스 앞으로
- pushState(), replaceState()
- 주소창 url 조작
pushState()- stateObj, title, url
- stateObj가 스택에 들어가요!
- 이걸 적절히 나중에 빼서 쓰기 좋아요
- 스택에 푸시 새로 넣어!
- stateObj, title, url
replaceState()- stateObj, title, url
- stateObj가 스택에 들어가요!
- 이걸 적절히 나중에 빼서 쓰기 좋아요
- 현재 state만 바꿔줘!
- pop & push
- stateObj, title, url
-
window.onpopstate
- callback function
- 같은 웹사이트에서 이동할때 이게 호출됩니다!
- window가 달라지면 무용지물이겠지?
- state, length
- history 객체의 변수
- 뒤로가기 막기
popstate¶
참고: https://developer.mozilla.org/en-US/docs/Web/API/Window/popstate_event
- 개요
- Window 인터페이스이며 active history entry가 변할 때 호출된다. (유저가 세션 히스토리를 검색하는 과정에서)
- 현재의 history entry를 유저가 방문한 마지막 페이지로 변동시킨다.
- 혹은
history.pushState()를 통해 히스토리 엔트리가 히스토리 스택에 쌓였다면, 해당 엔트리가 사용된다.
- History Stack
- 히스토리 엔트리가
history.pushState()를 통해 활성화되었거나,history.replaceState()를 통해 활성화 되었다면 history.pushState()혹은history.replaceState()를 호출하는 것만으로popstate이벤트가 호출되진 않아popstate이벤트는 브라우저 액션 (백버튼, 앞버튼)을 통해서 발생해- 브라우저마다 다르게
popstate액션을 다르게 처리하는 경향이 있어- 크롬/사파리는
popstate를 페이지 로드 시점에 항상 발생시키지만, 파폭은 안그래
- 크롬/사파리는
- 히스토리 엔트리가
- 언제 popstate가 호출되는가
- 사용자가 인터랙션이 없었던, 원하지 않는 팝업들은 브라우저가 popstate를 호출하지 않을 수 있어
- 인터랙션이 있어야 popstate가 호출된다는 점...
- navigation이 호출되면, popstate는 새로운 로케이션으로 이동하는 거의 마지막 단계에 있어.
- 이는 다음과 같은 일들이 발생하고 호출돼
- new location has loaded
- displayed
- made visible
popstate이벤트가 언제 호출되는지를 이해하기 위해 다음과 같은 간소화된 순서를 따라가보자. (유저가 갔던, 프로그래밍적으로 이동을 했던)- new-entry: 현재 히스토리가 전환
- current-entry: 현재 페이지의 세션 히스토리 스택
react-router navigate¶
참고: https://stackoverflow.com/questions/72794430/what-does-usenavigate-replace-option-do
- replace
navigate(path, {replace: true})- 현재 엔트리를 히스토리 스택에 두지 않고
replace 와 href¶
- replace
- 다음과 같은 플로우
- 네이버 페이지
- 서비스 페이지
- 여기서 본인인증 페이지를 window.location.replace로 이동
- 본인인증 페이지
- qs) 3. 본인인증 페이지에서 백버튼을 누르면?
-
- 서비스 페이지에 대한 히스토리는 쌓이지 않기에 1. 네이버 페이지로 이동한다.
-
- 다음과 같은 플로우
- href - 다음과 같은 플로우 1. 네이버 페이지 2. 서비스 페이지 - 여기서 본인인증 페이지를 window.location.href로 이동 3. 본인인증 페이지 - qs) 3. 본인인증 페이지에서 백버튼을 누르면? - 2. 서비스 페이지에 대한 히스토리는 쌓여 있지롱 2. 서비스 페이지로 이동한다.