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 相关文章推荐
经典的解除许多网站无法复制文字的绝招
Dec 31 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
Feb 03 Javascript
jQuery实现checkbox全选的方法
Jun 10 Javascript
分享javascript计算时间差的示例代码
Mar 19 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
javascript与jquery动态创建html元素示例
Jul 25 Javascript
百度搜索框智能提示案例jsonp
Nov 28 Javascript
Angular中ng-options下拉数据默认值的设定方法
Jun 21 Javascript
javaScript之split与join的区别(详解)
Nov 08 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
Mar 22 Javascript
redux.js详解及基本使用
May 24 Javascript
layui之table checkbox初始化时选中对应选项的方法
Sep 02 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异常处理使用示例
2014/02/25 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
php生成二维码
2015/08/10 PHP
轻松实现php文件上传功能
2017/02/17 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
ES6知识点整理之对象解构赋值应用示例
2019/04/17 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
Python OOP类中的几种函数或方法总结
2019/02/22 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
这可能是最好玩的python GUI入门实例(推荐)
2019/07/19 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
大三自我鉴定范文
2013/10/05 职场文书
护理专科毕业推荐信
2013/11/10 职场文书
应届生简历中的自我评价
2014/01/13 职场文书
初中学生期末评语
2014/04/24 职场文书
应届毕业生求职信范文
2014/05/08 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL