브라우저의 세션 기록 스택을 조작할 수 있는 API를 제공합니다. 이를 통해 사용자는 브라우저의 뒤로, 앞으로 가기 기능을 제어하고, 현재 URL을 변경하지 않고도 히스토리를 조작할 수 있습니다.
console.log(history.length);
history.back();
history.forward();
history.go(-1); // 이전 페이지로 이동
history.go(1); // 다음 페이지로 이동
history.pushState({ page: 1 }, "title 1", "page1.html");
history.replaceState({ page: 2 }, "title 2", "page2.html");
window.addEventListener('popstate', (event) => {
console.log('location: ' + document.location + ', state: ' + JSON.stringify(event.state));
});
1. A 페이지 방문 (history.length = 1, 현재 위치 = 0)
2. B 페이지 방문 (history.length = 2, 현재 위치 = 1)
3. C 페이지 방문 (history.length = 3, 현재 위치 = 2)
4. 뒤로 가기 (`history.back()`) - 현재 위치 = 1, B 페이지
5. 다시 뒤로 가기 (`history.back()`) - 현재 위치 = 0, A 페이지
6. 앞으로 가기 (`history.forward()`) - 현재 위치 = 1, B 페이지
history.pushState({ page: 1 }, "Title 1", "page1.html");
history.replaceState({ page: 2 }, "Title 2", "page2.html");
window.addEventListener('popstate', (event) => {
if (event.state) {
console.log('Popstate event:', event.state);
// 상태에 따라 페이지 콘텐츠를 업데이트합니다.
}
});
다음은 히스토리 스택을 관리하고 pushState와 popstate를 사용하는 예제입니다.
<!DOCTYPE html>
<html>
<head>
<title>History API Example</title>
</head>
<body>
<h1>History API Example</h1>
<button onclick="navigate('page1.html')">Go to Page 1</button>
<button onclick="navigate('page2.html')">Go to Page 2</button>
<script>
function navigate(url) {
// 새 상태를 히스토리 스택에 추가
history.pushState({ page: url }, "", url);
console.log('Navigated to:', url);
}
window.addEventListener('popstate', (event) => {
if (event.state) {
console.log('popstate event:', event.state.page);
// 여기에서 URL에 따라 페이지 콘텐츠를 변경할 수 있습니다.
} else {
console.log('popstate event with no state');
}
});
</script>
</body>
</html>
이 코드를 통해 히스토리 스택의 동작 방식을 이해하고, pushState와 popstate 이벤트를 활용하여 SPA(Single Page Application)에서 페이지 전환을 구현할 수 있습니다.
현재 히스토리 스택의 항목을 대체합니다. 이로 인해 히스토리 스택의 현재 페이지가 변경되지만, 히스토리 스택에 새로운 항목이 추가되지는 않습니다. 이 동작이 히스토리 탐색에 어떤 영향을 미치는지 살펴보겠습니다.
초기 상태
// Initial pages: A -> B -> C
history.pushState({ page: 'A' }, 'A', 'a.html');
history.pushState({ page: 'B' }, 'B', 'b.html');
history.pushState({ page: 'C' }, 'C', 'c.html');
현재 페이지 B에서 replaceState 호출
// 현재 페이지는 B입니다.
history.replaceState({ page: 'B-Modified' }, 'B Modified', 'b_modified.html');
히스토리 탐색
// 다음 페이지(C)로 이동
history.forward(); // Now on page C
// 이전 페이지(B)로 이동
history.back(); // Now on page B-Modified
따라서, replaceState를 사용하여 페이지를 갱신하면 이후 히스토리 탐색 시 해당 페이지는 갱신된 상태와 URL을 유지합니다. 이 동작은 사용자 경험을 향상시키고, 페이지 상태와 URL을 관리하는 데 유용합니다.
브라우저의 히스토리 스택에 새로운 상태와 URL을 추가하는 데 사용됩니다. 이 메서드를 호출하면 히스토리 스택에 새로운 항목이 추가되고, 브라우저의 주소 표시줄이 새로운 URL로 업데이트됩니다. 새로운 항목이 추가된 후에는 뒤로 가기 버튼을 눌러 이전 상태로 돌아갈 수 있습니다.
동적 페이지 탐색
<!DOCTYPE html>
<html>
<head>
<title>pushState Example</title>
</head>
<body>
<h1 id="title">Home Page</h1>
<button onclick="navigate('about', 'About Us', 'about.html')">About</button>
<button onclick="navigate('contact', 'Contact Us', 'contact.html')">Contact</button>
<button onclick="navigate('home', 'Home Page', 'home.html')">Home</button>
<script>
function navigate(page, title, url) {
document.getElementById('title').innerText = title;
history.pushState({ page: page }, title, url);
console.log(`Navigated to ${url} with title ${title}`);
}
window.addEventListener('popstate', (event) => {
if (event.state) {
document.getElementById('title').innerText = event.state.page;
console.log(`Popped state: ${JSON.stringify(event.state)}`);
}
});
</script>
</body>
</html>
이 예제에서는 버튼을 클릭하여 동적으로 페이지를 탐색하며, history.pushState를 사용하여 히스토리 스택에 새로운 상태와 URL을 추가합니다. 사용자가 뒤로 가기 버튼을 클릭하면 popstate 이벤트가 발생하여 페이지 상태를 복원합니다.
1. pushState의 구조:
history.pushState(stateObject, title, url);
2. pushState 동작:
3. 히스토리 스택 관리:
history.pushState는 히스토리 스택에 새로운 상태와 URL을 추가하는 메서드입니다. 이를 통해 SPA와 같은 동적 웹 애플리케이션에서 페이지 탐색을 보다 자연스럽게 구현할 수 있습니다. pushState를 사용하면 페이지를 다시 로드하지 않고도 URL을 변경하고 상태를 관리할 수 있습니다.
ChatGPT가 알려주는 HTML meta viewport(뷰포트) (0) | 2024.08.06 |
---|---|
ChatGPT가 알려주는 Javascript ArrayBuffer (0) | 2024.08.05 |
[Javascript] 업로드한 한글 파일 이름이 다운로드 시 깨질 때 (0) | 2023.11.11 |
[HTML] 전화걸기, 통화 연결 기능 (0) | 2023.11.09 |