wolffiex wolffiex - 15 days ago 5
Javascript Question

Assigning to document.location.href without clobbering history

In testing document.location.href, I have observed that when the user initiates an action that results in javascript that assigns to document.location.href, the new URL is added to the history.

However, if the call is initiated by javascript that is result of, say, state change of an XMLHTTPRequest, the entry for the current page in the history is over-written. Have I characterized this correctly? Is there a way to get the page change to be reflected in the history in this latter case?

Answer

I was facing the same problem and found this workaround which worked for me

instead of

function onAjaxCallback(evt){
    location.href=newLocation;
}

i wrapped the location.href call around a setTimeout. Seems to do the trick. My history's behaving fine now. Hope that helps

function onAjaxCallback(evt){
    setTimeout(function(){
        location.href=newLocation;
    },0)
}