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 相关文章推荐
使用JS操作页面表格,元素的一些技巧
Feb 02 Javascript
parentElement,srcElement的使用小结
Jan 13 Javascript
jqGrid读取选择的多行的某个属性代码
May 18 Javascript
javascript中with()方法的语法格式及使用
Aug 04 Javascript
jquery实现聚光灯效果的方法
Feb 06 Javascript
对象题目的一个坑 理解Javascript对象
Dec 22 Javascript
JavaScript事件类型中UI事件详解
Jan 14 Javascript
浅谈JavaScript作用域和闭包
Sep 18 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
Apr 26 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
Sep 19 Javascript
Vue实现开心消消乐游戏算法
Oct 22 Javascript
微信小程序indexOf的替换方法(推荐)
Jan 14 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防止sql注入简单分析
2015/03/18 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
node-webkit打包成exe文件被360误报木马的解决方法
2015/03/11 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
node.js开发辅助工具nodemon安装与配置详解
2020/02/06 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
Python-基础-入门 简介
2014/08/09 Python
简单了解python模块概念
2018/01/11 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
python如何安装下载后的模块
2020/07/03 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
三个儿子教学反思
2014/02/03 职场文书
大学军训感言300字
2014/03/09 职场文书
给学校的建议书范文
2014/05/15 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
党员身份证明材料
2015/06/19 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
Nginx配置https原理及实现过程详解
2021/03/31 Servers
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python