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 相关文章推荐
jQuery Ajax之$.get()方法和$.post()方法
Oct 12 Javascript
Javascript Web Slider 焦点图示例源码
Oct 10 Javascript
JS截取字符串常用方法详细整理
Oct 28 Javascript
理运用命名空间让js不产生冲突避免全局变量的泛滥
Jun 15 Javascript
jQuery代码实现发展历程时间轴特效
Jul 30 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
Nov 16 Javascript
简单介绍jsonp 使用小结
Jan 27 Javascript
动态更新highcharts数据的实现方法
May 28 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
Sep 23 Javascript
Vue中的异步组件函数实现代码
Jul 20 Javascript
vue-router命名路由和编程式路由传参讲解
Jan 19 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
Jun 22 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
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
javascript URL锚点取值方法
2009/02/25 Javascript
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
js电话号码验证方法
2015/09/28 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
Python基本socket通信控制操作示例
2019/01/30 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
农民工创业典型事迹
2014/01/25 职场文书
报名委托书
2015/01/29 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
《社戏》教学反思
2016/02/22 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server