学习mark
history.pushState(stateObject, title, url);
tip: stateObject = {key: value, ...},必须可序列化,理解为JSON.stringify & JSON.parse
接收url
的参数为string
类型,用以改变当前地址栏的url.
需要注意的一点就是这个参数不能和跨域,即协议,域名,端口必须都是相同的
replaceState
接收的参数pushState
相同,但是最终的效果是:地址栏url会根据接收的参数而变化,但是浏览器并未在当浏览历史栈中增加浏览器的历史记录,而是替换当前的浏览器历史记录。
通过pushState
和replaceState
虽然能改变URL,但是不会主动触发浏览器reload
。
注意:javascript脚本执行window.history.pushState和window.history.replaceState不会触发onpopstate。
注意:不同的浏览器在加载页面时处理popstate
事件的形式存在差异。页面加载时Chrome和Safari通常会触发(emit )popstate
事件,但Firefox则不会,所以有可能需要手动调用一次
注意,pushState()方法不会使hashchange时间发生,即使是新旧url只是hash不同。
https://developer.mozilla.org/zh-CN/docs/Web/Events/popstate