F
F
Fr3nzy2011-05-05 17:41:35
JavaScript
Fr3nzy, 2011-05-05 17:41:35

IE8 bug in History.js (cross browser solution for ajax history)

Are there people here who used this? :)
In IE8 (at least) there is a bug: when clicking on a link (in the handler of which History.pushState is specified), statechange does not work, and window.location changes (#anchor changes in IE8) - and only once. If you refresh the page, then the statechange event fires.

I tried to do the same when clicking on the link History.Adapter.trigger (window, "anchorchange") - it only helps with the first click on the link. All further clicks are stubbornly not processed (to the point that #anchor itself does not even change anymore).

Also, if you put IE in "IE8/7 Standards Compliance Mode", then the plugin starts working normally.

Sample code:

(function(window,undefined){
    // history module
    var History = window.History; // do not forget to use "H", instead of "h"
    
    if ( !History.enabled ) {
        return false;
    }
    
    // Note: We are using statechange instead of popstate
    History.Adapter.bind(window,'statechange',function(){
        // we are using History.getState() instead of event.state
        var State = History.getState();
        var url = State.url;
        // History.log(State.data, State.title, State.url);
        loadPage(url);
    });
})(window);


$(document).ready(function() {
    $("#bottom_nav a").click(function(event){
        var url = $(this).attr("href") + '?format=html';
        
        History.pushState(null, null, url);
        event.preventDefault();
        
        return false;
    });
});

Answer the question

In order to leave comments, you need to log in

1 answer(s)
F
Fr3nzy, 2011-05-06
@Fr3nzy

I'll write it myself, I'll answer it myself :) it was enough to set at least <!DOCTYPE HTML> .

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question