Re: @sizzle:
My bad. I didn't read your entire post. You already used popstate. I've had this problem on a similar page. The onpopstate doesn't help. The page doesn't reload, but the url changes.

This might help (you might have to use @run-at document-start):

var pushState = window.history.pushState;
window.history.pushState = window.history.replaceState = function (stateObj, title, url) {
    console.log('changed to: ' + url);
    pushState(stateObj, title, url);
};