Vue 禁用浏览器的前进后退操作


Posted in Javascript onSeptember 04, 2020

一.禁用前进后退功能

在开发vue应用中,如何禁用浏览器的前进后退功能呢?

网上搜到的答案基本如下:

history.pushState(null, null, document.URL)
window.addEventListener('popstate', function() {
 history.pushState(null, null, document.URL)
})

但应该放在哪儿?

经过尝试,我是如此写的:

main.js中,增加popstate监听

window.addEventListener('popstate', function() {
 history.pushState(null, null, document.URL)
})

router的index.js中:

const router = new Router({
 mode: 'hash',
 routes,
 scrollBehavior: () => {
  history.pushState(null, null, document.URL)
 }
})

这里我将pushState放在了scrollBehavior中。当然,你也可以尝试放在router的beforeEach/afterEach中

router.afterEach((to, from) => {
 history.pushState(null, null, location.protocol + '//' + location.host + '/#' + to.path)
})

不过这里的URL就不能使用document.URL了,因为此时的 document.URL 指向的是上一页面的 URL,这会导致第一次页面回退禁用无效。

二、history

history 对象包含浏览器历史。

常见属性/方法:

history.length - 属性保存着历史记录的URL数量;

history.back() - 等同于在浏览器点击后退按钮;

history.forward() - 等同于在浏览器中点击前进按钮;

history.go() - 加载 history 列表中的某个具体页面。

H5新增了属性/方法/事件:

history.state - 属性用来保存记录对象;

history.pushState() - 向浏览器的历史记录中添加一个状态;

history.replaceState() - 修改当前历史记录实体;

popstate事件 - 当活动历史记录条目更改时,将触发

1.history.state

返回当前页面的state对象

2.history.pushState(state, title, url)

state: 状态对象可以是任何可以序列化的对象。

title: 当前大多数浏览器都忽略此参数,尽管将来可能会使用它。

url: 新历史记录条目的URL由此参数指定。如果未指定此参数,则将其设置为文档的当前URL。

3.history.replaceState(state, title, url)

修改当前历史记录实体,如果你想更新当前的state对象或者当前历史实体的URL来响应用户的的动作的话这个方法将会非常有用。

参数与pushState类似。

4.popstate事件

当活动历史记录条目更改时,将触发popstate事件。

需要注意的是调用history.pushState()或history.replaceState()不会触发popstate事件。只有在做出浏览器动作时,才会触发该事件,如用户点击浏览器的回退按钮(或者在Javascript代码中调用history.back()或者history.forward()方法)。

不同的浏览器在加载页面时处理popstate事件的形式存在差异。页面加载时Chrome和Safari通常会触发(emit )popstate事件,但Firefox则不会。

补充知识:vue实现前进刷新,后退不刷新心得

最近在用vue做移动端的项目。希望实现前进刷新、后退不刷新的效果。即加载过的界面能缓存起来(返回不用重新加载),关闭的界面能被销毁掉(再进入时重新加载)。例如对a->b 前进(b)刷新,b->a 后退(a)不刷新。

需求:

默认显示 A

B 跳到 A,A 不刷新

C 跳到 A,A 刷新

实现方式:

在 A 路由里面设置 meta 属性

Vue 禁用浏览器的前进后退操作

Vue 禁用浏览器的前进后退操作

在 B 组件里面设置 beforeRouteLeave:

Vue 禁用浏览器的前进后退操作

vue新手注意:在App.vue中配置缓存的视图组件

在 C 组件里面设置 beforeRouteLeave:

Vue 禁用浏览器的前进后退操作

以上这篇Vue 禁用浏览器的前进后退操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
Nov 06 Javascript
解决jquery异步按一定的时间间隔刷新问题
Dec 10 Javascript
jquery和ajax的关系详细介绍
Nov 29 Javascript
22点关于jquery性能优化的建议
May 28 Javascript
js获取form的方法
May 06 Javascript
有趣的bootstrap走动进度条
Dec 01 Javascript
详谈js中window.location.search的用法和作用
Feb 13 Javascript
JavaScript设计模式之单例模式详解
Jun 09 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
Dec 22 jQuery
JavaScript常用事件介绍
Jan 21 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
Sep 03 jQuery
超详细小程序定位地图模块全系列开发教学
Nov 24 Javascript
详解JavaScript数据类型和判断方法
Sep 04 #Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
Sep 04 #Javascript
详解JavaScript中new操作符的解析和实现
Sep 04 #Javascript
我所理解的JavaScript中的this指向
Sep 04 #Javascript
JS运算符优先级与表达式示例详解
Sep 04 #Javascript
vue中的循环对象属性和属性值用法
Sep 04 #Javascript
JavaScript逻辑运算符相关总结
Sep 04 #Javascript
You might like
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
Javascript使用SWFUpload进行多文件上传
2016/11/16 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
解决vue v-for src 图片路径问题 404
2019/11/12 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
机器学习的框架偏向于Python的13个原因
2017/12/07 Python
python利用tkinter实现屏保
2019/07/30 Python
自定义django admin model表单提交的例子
2019/08/23 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
django框架forms组件用法实例详解
2019/12/10 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
Myholidays美国:在线旅游网站
2019/08/16 全球购物
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
大学生个人求职信范文
2013/09/21 职场文书
项目经理岗位职责
2013/11/11 职场文书
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
社区母亲节活动记录
2014/03/06 职场文书
中班上学期个人总结
2015/02/12 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python
Python实现拼音转换
2021/06/07 Python