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 相关文章推荐
拖动一个HTML元素
Dec 22 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
Jan 17 Javascript
JQuery加载图片自适应固定大小的DIV
Sep 12 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
Apr 03 Javascript
JavaScript学习笔记之JS事件对象
Jan 22 Javascript
EasyUI实现第二层弹出框的方法
Mar 01 Javascript
JSON遍历方式实例总结
Dec 07 Javascript
javascript时间差插件分享
Jul 18 Javascript
canvas实现图像截取功能
Feb 06 Javascript
jQuery封装animate.css的实例
Jan 04 jQuery
vue实现数字滚动效果
Jun 29 Javascript
在HTML5 localStorage中存储对象的示例代码
Apr 21 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中的串行化变量和序列化对象
2006/09/05 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
2011/06/04 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
python 文件与目录操作
2008/12/24 Python
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
在Windows8上的搭建Python和Django环境
2014/07/03 Python
python实现从ftp服务器下载文件的方法
2015/04/30 Python
Python中类的定义、继承及使用对象实例详解
2015/04/30 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
python中私有函数调用方法解密
2016/04/29 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
详解Python3中ceil()函数用法
2019/02/19 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
Yahoo-PHP面试题4
2012/05/05 面试题
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
车贷收入证明范本
2014/01/09 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
学校食堂管理制度
2015/08/04 职场文书
新年祝酒词大全
2015/08/11 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript