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每次Title显示不同的名言
Sep 25 Javascript
Javascript 获取链接(url)参数的方法
Feb 15 Javascript
input的focus方法使用
Mar 13 Javascript
JavaScript判断前缀、后缀是否是空格的方法
Apr 15 Javascript
JS实现当前页居中分页效果的方法
Jun 18 Javascript
arguments对象验证函数的参数是否合法
Jun 26 Javascript
JavaScript代码性能优化总结(推荐)
May 16 Javascript
vue的安装及element组件的安装方法
Mar 09 Javascript
详解vue-cli3多环境打包配置
Mar 28 Javascript
js实现简单点赞操作
Mar 17 Javascript
如何HttpServletRequest文件对象并储存
Aug 14 Javascript
Node在Controller层进行数据校验的过程详解
Aug 28 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 disk_free_space 返回目录可用空间
2010/05/10 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
jQuery 表格工具集
2010/04/25 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
2016/11/21 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
Vue.js用法详解
2017/11/13 Javascript
React Native 图片查看组件的方法
2018/03/01 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
JS实现骰子3D旋转效果
2019/10/24 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
Python3 集合set入门基础
2020/02/10 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
经济贸易专业自荐信
2014/06/11 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
高二英语教学反思
2016/03/03 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers
python如何为list实现find方法
2022/05/30 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python