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 编程引入命名空间的方法
Jun 29 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
Dec 09 Javascript
js+CSS实现弹出居中背景半透明div层的方法
Feb 26 Javascript
Javascript发送AJAX请求实例代码
Aug 21 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
Oct 21 Javascript
Bootstrap基本组件学习笔记之面板(14)
Dec 08 Javascript
JavaScript判断浏览器及其版本信息
Jan 20 Javascript
JavaScript实现分页效果
Mar 28 Javascript
vue 过滤器filter实例详解
Mar 14 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
Sep 30 Javascript
基于JS实现前端压缩上传图片的实例代码
May 14 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
Nov 11 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
一个程序下载的管理程序(二)
2006/10/09 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
php学习笔记之基础知识
2014/11/08 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
Prototype ObjectRange对象学习
2009/07/19 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
javascript操作数组详解
2014/12/17 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
进一步理解Python中的函数编程
2015/04/13 Python
Python切片知识解析
2016/03/06 Python
启动targetcli时遇到错误解决办法
2017/10/26 Python
python实现彩票系统
2020/06/28 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
python中可以声明变量类型吗
2020/06/18 Python
生产现场工艺工程师岗位职责
2013/11/28 职场文书
国培教师自我鉴定
2014/02/12 职场文书
工程部岗位职责
2015/02/10 职场文书
酒店开业主持词
2015/07/02 职场文书
高三教师工作总结2015
2015/07/21 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP