http://javascript.ruanyifeng.com/bom/history.html
https://developer.mozilla.org/zh-CN/docs/DOM/Manipulating_the_browser_history
window.history.back();
window.history.forward();
window.history.go(-1);
window.history.go(1);
window.history.length;
window.history.scrollRestoration;
window.history.state;
window.history
History {
length: 14,
scrollRestoration: "auto",
state: 0
}
length: 14
scrollRestoration: "auto"
state: 0
__proto__: History
back: function back()
forward: function forward()
go: function go()
length: (...)
pushState: function pushState()
replaceState: function replaceState()
scrollRestoration: (...)
state: (...)
constructor: function History()
Symbol(Symbol.toStringTag): "History"
get length: function ()
get scrollRestoration: function ()
set scrollRestoration: function ()
get state: function ()
__proto__: Object
https://www.renfei.org/blog/html5-introduction-3-history-api.html
http://www.zhangxinxu.com/wordpress/2013/06/html5-history-api-pushstate-replacestate-ajax/
http://www.tangshuang.net/2287.html
https://css-tricks.com/using-the-html5-history-api/
https://stackoverflow.com/questions/17612307/pushstate-what-exactly-is-the-state-object-for
https://github.com/xgqfrms/javascript