history.pushStateumieszcza bieżący stan strony na stosie historii i zmienia adres URL w pasku adresu. Tak więc, kiedy wrócisz, ten stan (przekazany obiekt) zostanie Ci zwrócony.
Obecnie to wszystko, co robi. Wszelkie inne działania na stronie, takie jak wyświetlenie nowej strony lub zmiana tytułu strony, muszą zostać wykonane przez Ciebie.
Specyfikacja W3C, którą łączysz, to tylko wersja robocza, a przeglądarka może implementować ją inaczej. Na przykład Firefox ignoruje rozszerzenietitle całkowicie parametr.
Oto prosty przykład tego pushState, którego używam na mojej stronie internetowej.
(function($){
// Use AJAX to load the page, and change the title
function loadPage(sel, p){
$(sel).load(p + ' #content', function(){
document.title = $('#pageData').data('title');
});
}
// When a link is clicked, use AJAX to load that page
// but use pushState to change the URL bar
$(document).on('click', 'a', function(e){
e.preventDefault();
history.pushState({page: this.href}, '', this.href);
loadPage('#frontPage', this.href);
});
// This event is triggered when you visit a page in the history
// like when yu push the "back" button
$(window).on('popstate', function(e){
loadPage('#frontPage', location.pathname);
console.log(e.originalEvent.state);
});
}(jQuery));