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 相关文章推荐
Javascript里使用Dom操作Xml
Jan 22 Javascript
新鲜出炉的js tips提示效果
Apr 03 Javascript
读jQuery之十 事件模块概述
Jun 27 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
Dec 05 Javascript
vue组件间通信解析
Mar 01 Javascript
JavaScript基础之流程控制语句的用法
Aug 31 Javascript
使用JavaScript实现一个小程序之99乘法表
Sep 21 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
Mar 01 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
Sep 12 Javascript
fetch 如何实现请求数据
Dec 20 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
JS实现简易图片自动轮播
Oct 16 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
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
JavaScript更改class和id的方法
2008/10/10 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
javascript中兼容主流浏览器的动态生成iframe方法
2014/05/05 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
全面解析Bootstrap表单使用方法(表单样式)
2015/11/24 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
js匿名函数使用&传参(实例)
2017/09/08 Javascript
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
python使用锁访问共享变量实例解析
2018/02/08 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
PyTorch安装与基本使用详解
2020/08/31 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
css3发光搜索表单分享
2014/04/11 HTML / CSS
关于 HTML5 的七个传说小结
2012/04/12 HTML / CSS
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
中专生自我鉴定范文
2014/02/02 职场文书
导游个人求职信范文
2014/03/23 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
法定代表人证明书
2014/11/28 职场文书
大学生党课心得体会
2016/01/07 职场文书
反邪教学习心得体会
2016/01/15 职场文书
数据库连接池
2021/04/06 MySQL
基于Redis的List实现特价商品列表功能
2021/08/30 Redis