Trong các trình duyệt và HTML5 hiện đại , có một phương thức được gọi pushState
trên cửa sổ history
. Điều đó sẽ thay đổi URL và đẩy nó vào lịch sử mà không cần tải trang.
Bạn có thể sử dụng nó như thế này, nó sẽ lấy 3 tham số, 1) tiêu đề đối tượng trạng thái 2) và một URL):
window.history.pushState({page: "another"}, "another page", "example.html");
Điều này sẽ thay đổi URL, nhưng không tải lại trang. Ngoài ra, nó không kiểm tra xem trang có tồn tại hay không, vì vậy nếu bạn thực hiện một số mã JavaScript đang phản ứng với URL, bạn có thể làm việc với chúng như thế này.
Ngoài ra, có history.replaceState()
những thứ thực hiện chính xác điều tương tự, ngoại trừ nó sẽ sửa đổi lịch sử hiện tại thay vì tạo một cái mới!
Ngoài ra, bạn có thể tạo một chức năng để kiểm tra nếu history.pushState
tồn tại, sau đó tiếp tục với phần còn lại như thế này:
function goTo(page, title, url) {
if ("undefined" !== typeof history.pushState) {
history.pushState({page: page}, title, url);
} else {
window.location.assign(url);
}
}
goTo("another page", "example", 'example.html');
Ngoài ra bạn có thể thay đổi #
cho <HTML5 browsers
, mà không load lại trang. Đó là cách Angular sử dụng để làm SPA theo hashtag ...
Thay đổi #
là khá dễ dàng, làm như:
window.location.hash = "example";
Và bạn có thể phát hiện ra nó như thế này:
window.onhashchange = function () {
console.log("#changed", window.location.hash);
}