Htm5的hash和history模式

120 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

1.Hash模式

概念:hash指的是url尾巴后面的#以及其后的字符串。比如在用超链接制作锚点跳转的时候,就会发现,url后面跟了"#id",#意味着锚点,用来做页面定位的,

在html5的history出现之前基本都是使用hash来实现前端路由,主要是因为:Hash值的变化 不会导致浏览器向服务器发出请求;

会触发window.hashChange事件,假如我们在hashChange事件中获取当前的hash值,并根据hash值来修改页面内容,则达到了前端路由的目的。

2.History模式

概念:HTML5规范提供了history.pushState和history.replaceState来进行路由控制,通过这两个方法可以改变url且向不同浏览器发送请求。但hstory路由需要浏览器支持,并且需将所有的路由重定向到根页面。

已经有hash模式了,为什么还要搞个history呢?

1. 不会像hash有个#,会更加美观;

2. hash 兼容IE8以上,history 兼容 IE10 以上;

3. Hash的传参是基于url的,若要传递复杂的参数,会有体积的限制,而history不仅可以在url中放参数,还可以将数据存在一个特定的对象stateObject 中;

4. history设置的新的url可以与当前ur一模一样,这样也会把记录添加到栈中,而hash设置的新值必须与原来不一样才会把记录添加到栈中;

5. History设置的新的url可以是与当前url同源的任意url,而hash只可修改#后面的部分。