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 相关文章推荐
Convert Seconds To Hours
Jun 16 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
Feb 19 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
Jul 20 Javascript
JS长整型精度问题实例分析
Jan 13 Javascript
简单谈谈JS数组中的indexOf方法
Oct 13 Javascript
AngularJs 常用的过滤器
May 15 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
Jun 16 jQuery
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
Dec 12 Javascript
vue鼠标悬停事件实例详解
Apr 01 Javascript
vue集成kindeditor富文本的实现示例代码
Jun 07 Javascript
OpenLayers加载缩放控件使用方法详解
Sep 25 Javascript
Vue实现下拉加载更多
May 09 Vue.js
详解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下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
2012/07/15 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
php中yii框架实例用法
2020/12/22 PHP
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
2016/09/27 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
python中logging库的使用总结
2017/10/18 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
西安众合通用.net笔试题
2013/03/18 面试题
成龙洗发水广告词
2014/03/14 职场文书
详解Oracle块修改跟踪功能
2021/11/07 Oracle