区别

hash模式下,仅hash符号之前的内容会被包含在请求中,如 http://www.11.com 因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回404错误;

history模式下,前端的url必须和实际后端发起请求的url一致,如http://www.222.com/aa/ 。如果后端缺少对/aa/ 的路由处理,将返回404错误。此时需要在后端作出相应的调整(比如nginx配置重定向)

hash模式

hash就是指url后的#号以及后面的字符

hash也称作锚点,本身是用来做页面定位的,他可以使对应的id元素显示在可视区域内。

hash模式背后的原理是 onhashchange 事件,可以在window对象上监听这个事件,并通过window.hash 获取 url 后面的hash值。

window.onhashchange = function(event){console.log(event.oldURL, event.newURL);let hash = location.hash.slice(1);// 获取hash后可以用来进行下一步的操作 document.body.style.color = hash;
}

hash发生变化的url都会被浏览器记录下来,所以浏览器的前进后退都可以用了,以上代码点击前进后退时,页面字体颜色也会发生变化。这样一来,尽管浏览器没有请求服务器,但是页面状态和url一一关联起来,后来人们给它起了一个霸气的名字叫前端路由,成为了单页应用标配。

history模式

利用了html5 History 中新增的 pushState 和 replaceState 方法。这两个方法应用于浏览器的历史记录栈,在当前已有的 back、forward、go 的基础之上,它们提供了对历史记录进行修改的功能。

pushState 和 replaceState 方法

pushState  用来在浏览器历史中添加记录,replaceState 用来在浏览器历史中修改当前记录。当它们执行修改时,虽然改变了当前的 URL,但浏览器不会立即向后端发送请求

pushState 方法

history.pushState方法接受三个参数,依次为:

  • state:一个与指定网址相关的状态对象,popstate 事件触发时,该对象会传入回调函数。如果不需要这个对象,此处可以填null。
  • title:新页面的标题,但是所有浏览器目前都忽略这个值,因此这里可以填null
  • url:新的网址,必须与当前页面处在同一个域(不能跨域!!)。浏览器的地址栏将显示这个网址。
// 假定当前网址是example.com/1.html
// 我们使用pushState方法在浏览记录(history对象)中添加一个新记录。var stateObj = { foo: 'bar' };history.pushState(stateObj, 'page 2', '2.html');

添加上面这个新记录后,浏览器地址栏立刻显示example.com/2.html,但并不会跳转到2.html,甚至也不会检查2.html是否存在,它只是成为浏览历史中的最新记录

假定这时你访问了其他页面,然后点击了倒退按钮,页面的url将显示2.html,但是内容还是原来的1.html。你再点击一次倒退按钮,url将显示1.html,内容不变。

replaceState 方法

history.replaceState方法的参数与pushState方法一模一样。

// 假定当前网页是example.com/example.html。history.pushState({page: 1}, 'title 1', '?page=1');history.pushState({page: 2}, 'title 2', '?page=2');history.replaceState({page: 3}, 'title 3', '?page=3'); // 修改了当前页面page=2history.back()// url显示为http://example.com/example.html?page=1history.back()// url显示为http://example.com/example.htmlhistory.go(2)// url显示为http://example.com/example.html?page=3

popstate 事件

每当同一个文档的浏览历史(即history对象)出现变化时,就会触发popstate事件,但是调用 pushState 和 replaceState 方法不会触发改时间,只有用户点击浏览器倒退按钮和前进按钮,或者使用JavaScript调用back、forward、go方法时才会触发。

使用的时候,可以为 popstate 事件指定回调函数。这个回调函数的参数是一个event事件对象,它的state属性指向 pushState 和 replaceState 方法为当前URL所提供的状态对象(即这两个方法的第一个参数)。

 window.onpopstate = function (event) {console.log('location: ' + document.location);console.log('state: ' + JSON.stringify(event.state));};// 或者window.addEventListener('popstate', function(event) {console.log('location: ' + document.location);console.log('state: ' + JSON.stringify(event.state));});

hash 和 history 两种模式相关推荐

  1. hash和history两种模式的区别+SpringBoot的特定配置

    今天学习到vue-router有两种模式,一种是hash,一种是history模式 这两种模式对于后端来说有点区别 1,hash模式 这个模式是链接后拼接/#/这样的形式,在实际请求时并不加入#后面的 ...

  2. vue路由的两种模式:hash与history的区别

    前言:众所周知,vue-router有两种模式,hash模式和history模式,下面来看看两者的区别. 一.基本情况 直观区别:hash模式url带#号,history模式不带#号. 1.hash模 ...

  3. vue-router前端路由的两种模式的区别

    一.前端路由存在的意义 前端路由主要应用在spa项目中. 核心---在无刷新(不向后端发送请求)的情况下,可以根据不同url更改视图. 二.浏览器提供hash 和history 两种模式支持(可以说, ...

  4. Vue 路由router的两种模式

    两种模式 vue中router可以设两种模式:hash和history.设置方式就是代码中注释的部分. import Vue from 'vue' import Router from 'vue-ro ...

  5. “约见”面试官系列之常见面试题之第一百零二篇之vue-router的两种模式(建议收藏)

    众所周知,vue-router有两种模式,hash模式和history模式,这里来谈谈两者的区别. hash模式 hash模式背后的原理是onhashchange事件,可以在window对象上监听这个 ...

  6. vue路由之路由的两种模式

    文章目录 简介 hash路由 history模式 两种模式的比较 history存在的问题 专栏目录请点击 简介 一般路由分两种形式 一种是哈希路由,最明显的特征就是路由中有一个# 还有一种就是his ...

  7. vue-router 两种模式

    路由的两种模式 一.更新视图但是不重新请求页面,是前端路由原理的核心之1,目前在浏览器环境中这一功能的实现主要有两种: (1)默认是hash模式,路由上方的路径是用#表示 (2)history是利用U ...

  8. vue-router 两种模式的区别

    vue-router有两种模式,hash模式和history模式,这里来谈谈两者的区别. **hash模式** hash模式背后的原理是onhashchange事件,可以在window对象上监听这个事 ...

  9. 前端路由的两种模式:hashhistory

    前端路由的两种模式:hash和history 1.hash hash模式是通过onhashchange事件,监听url的修改优点:兼容性比较高,可以直接在项目部署上线时使用缺点:url中带#号,不美观 ...

最新文章

  1. BZOJ1946 : [Ceoi2006]ANTENNA
  2. Ukbench图像数据集
  3. asp.net 中ListBox 显示 2 列
  4. 关于instancetype代替id的使用区别
  5. linux 块编辑,vim中的可视块编辑
  6. java集合类中的迭代器
  7. 大数据之-Hadoop完全分布式_完全分布式配置总结---大数据之hadoop工作笔记0040
  8. web前端课程设计源码大全(HTML+CSS+JS)
  9. 数据分析:某地PM2.5数据分析
  10. C库函数——fabs()
  11. 新研究起底人类和机器注意力机制的区别|一周AI最火论文
  12. 计算机视觉、模式识别、机器学习常用牛人主页链接
  13. SAP小技巧之 实现SMARTFORM打印中的小计与总计
  14. window系统如何禁止运行指定程序
  15. python自动化ppt_老男孩Python自动化开发12期完整精华版(含作业代码课件)
  16. Origin色卡(oth、pal格式)
  17. 贪吃蛇小游戏(代码)
  18. 咖啡在手,指数我有——指数咖啡
  19. 行业大咖齐聚鹏城 八大峰会打造2021深圳国际全触与显示展“新名片”
  20. 自托管 NodeJS ChatGPT Discord 机器人

热门文章

  1. 构建全真互联数字地图底座 腾讯地图产业版WeMap重磅升级
  2. 不能上到MySQL服务器连接127.0.0.1
  3. 计算机病毒引导实验,东华大学计算机病毒实验一引导型病毒实验报告.doc
  4. 实习面经:让渡居-数据科学家
  5. GEE- 哨兵数据进行植被指数计算(MTCI)
  6. 利用Opencv+Python 实现二维码识别
  7. python素数求和编程_Python练习题4.2统计素数并求和
  8. 登过《Vogue》,当过战地记者,Lee Miller的传奇人生
  9. MySQL学习笔记(三)— 查询篇(DQL语言)
  10. 小学计算机课教案,小学信息技术教案(全套).docx