hash和history的区别

144 阅读1分钟
  • hash有#号,history没有#号
  • hash是监听location对象hash值变化实现,history是利用浏览历史记录栈的API实现
  • 相同的URL,history会触发添加到浏览器历史记录栈中,hash不会触发
  • hashRouter的原理:通过window.onhashchange方法获取新URL中hash值
  • historyRouter的原理:通过history.pushState使用它做页面跳转不会触发页面刷新,使用window.onpopstate监听浏览器的前进和后退

HTML5 History Interface新增 pushState()replaceState() 方法,用来完成URL跳转而无需重新加载页面
pushState()和replaceState()的作用就是可以将URL替换并且不刷新页面,也不会触发popstate事件,http并没有去请求服务器该路径下的资源,一旦刷新就会显示404

  • pushState() 设置的新 URL 可以是与当前 URL 同源的任意 URL;而 hash 只可修改 # 后面的部分,因此只能设置与当前 URL 同文档的 URL
  • pushState() 设置的新 URL 可以与当前 URL 一模一样,这样也会把记录添加到栈中;而 hash 设置的新值必须与原来不一样才会触发动作将记录添加到栈中
  • pushState() 通过 stateObject 参数可以添加任意类型的数据到记录中;而 hash 只可添加短字符串
  • pushState() 可额外设置 title 属性供后续使用