A different approach to consider, if it interests you: hide all navigation events behind an object which can be swapped out based on the browser. The object's interface would have a "load" method; the non-push-state instance would convert load calls to hard refreshes; the push-state instance would do ajax loading.