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 相关文章推荐
display和visibility的区别示例介绍
Feb 26 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
Apr 06 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
Feb 26 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
Nov 03 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
Jan 09 Javascript
JavaScript日期选择功能示例
Jan 16 Javascript
微信小程序实战篇之购物车的实现代码示例
Nov 30 Javascript
vue中v-text / v-html使用实例代码详解
Apr 02 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
Jan 02 Javascript
详解react组件通讯方式(多种)
May 06 Javascript
小程序实现列表展开收起效果
Jul 29 Javascript
JavaScript实现H5接金币功能(实例代码)
Feb 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
Codeigniter的一些优秀特性总结
2015/01/21 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
js获取当前日期时间及其它操作汇总
2015/04/17 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
js数组的基本使用总结
2021/01/18 Javascript
python中的函数用法入门教程
2014/09/02 Python
Python中对列表排序实例
2015/01/04 Python
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
解析Python编程中的包结构
2015/10/25 Python
Python 备份程序代码实现
2017/03/06 Python
详解Python 切片语法
2019/06/10 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
优秀医生事迹材料
2014/02/12 职场文书
暑期培训心得体会
2014/09/02 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
《包身工》教学反思
2016/02/23 职场文书
2016年清明节网上祭英烈活动总结
2016/04/01 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
在CSS中使用when/else的方法
2022/01/18 HTML / CSS
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫