router: onpopstate

学习mark

 

history.pushState(stateObject, title, url);

tip: stateObject = {key: value, ...},必须可序列化,理解为JSON.stringify & JSON.parse

 

接收url的参数为string类型,用以改变当前地址栏的url.

需要注意的一点就是这个参数不能和跨域,即协议,域名,端口必须都是相同的

 

replaceState接收的参数pushState相同,但是最终的效果是:地址栏url会根据接收的参数而变化,但是浏览器并未在当浏览历史栈中增加浏览器的历史记录,而是替换当前的浏览器历史记录。

 

通过pushStatereplaceState虽然能改变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

https://segmentfault.com/a/1190000007166839

猜你喜欢

转载自luqingxuan.iteye.com/blog/2395807