|
|
|
pushState, popState ไม่แสดงผลในหน้าของมันเมื่อกด back หลังจาก reload. |
|
|
|
|
|
|
|
มีไฟล์อยู่ 2 ไฟล์ดังนี้
Code (JavaScript)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
.content {
border: 1px dashed #ccc;
padding: 10px;
}
</style>
</head>
<body>
<h1>Example AJAX and URL change.</h1>
<a class="ajax-link" href="page2.html">Go to page 2</a>
<div class="content">
Page 1 content. The ajax content will be display in here.
</div>
<script>
document.querySelector('.ajax-link').addEventListener('click', function(event) {
event.preventDefault();
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
let htmlContent = (new DOMParser)
.parseFromString(xhr.response, "text/html")
.documentElement
.querySelector('.content')
.innerHTML;
document.querySelector('.content').innerHTML = htmlContent;
history.pushState({'pageUrl': event.target.href, 'content': htmlContent}, '', event.target.href);
}
}
xhr.open('GET', event.target.href);
xhr.send();
});
window.addEventListener('popstate', function(event) {
console.log('popstate fired!');
console.log(event.state);
if (event.state.content) {
document.querySelector('.content').innerHTML = event.state.content;
}
});
history.replaceState({
content: document.querySelector('.content').innerHTML,
}, document.title, document.location.href);
</script>
</body>
</html>
page1.html
Code (JavaScript)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div>
<a href="page1.html">Go to page1</a>
</div>
<div class="content">
Page 2 content.
</div>
<script>
</script>
</body>
</html>
page2.html
ลำดับมันจะซับซ้อนหน่อยนะ
ลำดับเหตุการณ์:
* เปิดหน้า page1.html
* คลิกลิ้งค์ไปหน้า page2.html
* JS จะทำการเรียกโดยผ่าน XHR (AJAX) มาแสดงผล ถูกต้อง
* URL เปลี่ยนเป็น page2.html ถูกต้อง
* กด back กลับมา
* เนื้อหากลับมาเป็นของหน้าแรก ถูกต้อง
* URL เปลี่ยนเป็น page1.html ถูกต้อง
* กด forward กลับไป
* เนื้อหาแสดงผลของหน้า page 2 ถูกต้อง
* URL เปลี่ยนเป็น page2.html ถูกต้อง
จากกระบวนการคลิกแล้วกลับไปกลับมา มันก็ปกติดี แต่... เมื่อเจอการใช้งานแบบนี้ มันกลับเดี้ยงครับ!???
ลำดับต่อจากด้านบน
* หลังจากคลิกกลับไปหน้า page 2
* กด F5 หรือ reload, refresh 1 ที
* มันจะแสดงผลของหน้า page2.html ถูกต้อง
* กด back กลับมา
* เนื้อหาค้างเติ่งอยู่ที่หน้า page2.html ไม่ยอมแสดงเนื้อหาของ page 1 อันนี้มีปัญหาครับ
* URL เปลี่ยนเป็น page1.html ถูกต้อง
ทำยังไงให้มัน reload ที่หน้า page2.html แล้วกด back กลับมาก็แสดงหน้า page1.html ได้ถูกต้องครับ?
Tag : HTML5, JavaScript, Ajax
|
ประวัติการแก้ไข 2019-09-26 17:39:03
|
|
|
|
|
Date :
2019-09-26 17:28:24 |
By :
mr.v |
View :
1060 |
Reply :
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
น่าจะเป็นปัญหา browser bug ลองแล้วไม่ได้เช่นกัน
|
|
|
|
|
Date :
2020-08-02 23:09:55 |
By :
PhrayaDev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|