support browser back

use pushState instead of replaceState internally