history.replaceState() example? history.replaceState() example? ajax ajax

history.replaceState() example?


Indeed this is a bug, although intentional for 2 years now.The problem lies with some unclear specs and the complexity when document.title and back/forward are involved.

See bug reference on Webkit and Mozilla.Also Opera on the introduction of History API said it wasn't using the title parameter and probably still doesn't.

Currently the 2nd argument of pushState and replaceState — the title of the history entry — isn't used in Opera's implementation, but may be one day.

Potential solution

The only way I see is to alter the title element and use pushState instead:

document.getElementsByTagName('title')[0].innerHTML = 'bar';window.history.pushState( {} , 'bar', '/bar' );


Here is a minimal, contrived example.

console.log( window.location.href );  // whatever your current location href iswindow.history.replaceState( {} , 'foo', '/foo' );console.log( window.location.href );  // oh, hey, it replaced the path with /foo

There is more to replaceState() but I don't know what exactly it is that you want to do with it.


history.pushState pushes the current page state onto the history stack, and changes the URL in the address bar. So, when you go back, that state (the object you passed) are returned to you.

Currently, that is all it does. Any other page action, such as displaying the new page or changing the page title, must be done by you.

The W3C spec you link is just a draft, and browser may implement it differently. Firefox, for example, ignores the title parameter completely.

Here is a simple example of pushState that I use on my website.

(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));