don't mess with history

use history.replaceState instead of directly setting
window.location.hash, so that the history is not messed up.