持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
浏览器的路由是我们网页的入口,在以前的时候,一个页面就需要路由重新访问并跳转,在有了ajax的局部刷新后,开始不需要刷新整个页面了。现在的页面很多都是单页应用,不需要每个页面去请求服务器一次,那单页应用是如何实现页面跳转的呢,主要分成hash和history两种模式。
hash
hash主要指的是浏览器路径栏中#字符以后的部分内容,当他们被修改时,浏览器不会发起请求,但是会触发相应的方法。
前端js可以通过监听onhashchange方法来控制路由的跳转,每次修改浏览器路径栏上的hash值时就会触发该事件,还有a标签点击用作锚点的功效。
通过设置window.location.hash属性可以修改控制路径栏中的hash内容,以及获取当前路由的hash值,并且浏览器的前进后退按钮会记录hash值的变化并对其做出改变,所以hash路由也能对前进后退按钮产生反应
history
history模式和hash模式从路径栏上来说最大的不同就是history模式不会有#符号,对于用户来说观感更好。
实际使用呢,还需要服务器特殊配置一下,因为浏览器会以当前路由向服务器发起请求,而实际上可能没有对应路径的文件,这个时候就需要将访问重定向至首页,然后前端js接手处理,根据路由再做相应跳转。
history模式主要的是靠window.histoty对象来改变路由,因为它改变路由不会刷新页面,当需要跳转时可以通过window.history.pushState方法来修改路由,同时修改页面内容,以达成单页应用的路由跳转,或者使用History.replaceState()方法来修改当前页面的路由。
而点击浏览器的前进后退按钮则可以通过监听history.popstate方法来监听改变。