Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求


Posted in Javascript onSeptember 01, 2020

网上很多博客说监听窗口关闭事件使用window.beforeunload,但是这个监听事件也会在页面刷新的时候执行,经过百度和自己的实际测试,

终于解决了这个问题,代码如下:

mounted() {
   window.addEventListener('beforeunload', e => this.beforeunloadHandler(e))
   window.addEventListener('unload', e => this.unloadHandler(e))
  },
  destroyed() {
   window.removeEventListener('beforeunload', e => this.beforeunloadHandler(e))
   window.removeEventListener('unload', e => this.unloadHandler(e))
  },
  methods: {
   beforeunloadHandler(){
    this._beforeUnload_time=new Date().getTime();
   },
   unloadHandler(e){
    this._gap_time=new Date().getTime()-this._beforeUnload_time;
    debugger
    //判断是窗口关闭还是刷新
    if(this._gap_time<=5){
     //如果是登录状态,关闭窗口前,移除用户
     if(!this.showLoginButton){
      $.ajax({
       url: '/pictureweb/user/remove',
       type: 'get',
       async:false, //或false,是否异步
       
      })
     }
    }
   },
}

window.beforeunload事件在window.unload事件之前执行。同时注意ajax请求方式必须为同步请求,所以不能使用axios,因为axios不能执行同步请求。

补充知识:vue如何在用户要关闭当前网页时弹出提示

效果如下图

Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求

正常 js 页面处理方式

window.onbeforeunload = function (e) {
 e = e || window.event;
 // 兼容IE8和Firefox 4之前的版本
 if (e) {
  e.returnValue = '关闭提示';
 }
 // Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
 return '关闭提示';
};

vue 中处理方式

let _this = this
  window.onbeforeunload = function (e) {
   if (_this.$route.name == "dyyPerformanceCenterSale") {
    e = e || window.event;
    // 兼容IE8和Firefox 4之前的版本
    if (e) {
     e.returnValue = '关闭提示1111';
    }
    // Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
    return '关闭提示222';
   } else {
    window.onbeforeunload = null
   }
  };

针对很多同学说的没有实现 ,我这里在详细描述一下 方法写在 mounted里面 ,然后 记得把route name替换成自己当前页面。

以上这篇Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
May 21 Javascript
JavaScript 的继承
Oct 01 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
Jul 17 Javascript
jQuery模拟超链接点击效果代码
Apr 21 Javascript
JS保存和删除cookie操作 判断cookie是否存在
Nov 13 Javascript
js验证电话号码与手机支持+86的正则表达式
Jan 23 Javascript
requirejs按需加载angularjs文件实例
Jun 08 Javascript
AngularJS 限定$scope的范围实例详解
Jun 23 Javascript
为什么我们要做三份 Webpack 配置文件
Sep 18 Javascript
JS实现简单tab选项卡切换
Oct 25 Javascript
JavaScript代理模式原理与用法实例详解
Mar 10 Javascript
原生JS封装拖动验证滑块的实现代码示例
Jun 01 Javascript
Node.js web 应用如何封装到Docker容器中
Sep 01 #Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
Sep 01 #Javascript
Vue 使用typescript如何优雅的调用swagger API
Sep 01 #Javascript
vue路由切换时取消之前的所有请求操作
Sep 01 #Javascript
jQuery实现动态加载瀑布流
Sep 01 #jQuery
vue Treeselect下拉树只能选择第N级元素实现代码
Aug 31 #Javascript
vue treeselect获取当前选中项的label实例
Aug 31 #Javascript
You might like
PHP源码之explode使用说明
2011/08/05 PHP
PHP小技巧之函数重载
2014/06/02 PHP
php中spl_autoload详解
2014/10/17 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
PHP7多线程搭建教程
2017/04/21 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
载入进度条 效果
2006/07/08 Javascript
用 JavaScript 迁移目录
2006/12/18 Javascript
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
Node.js重新刷新session过期时间的方法
2016/02/04 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
2017/12/15 Javascript
JavaScript使用闭包模仿块级作用域操作示例
2019/01/21 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
利用python实现微信头像加红色数字功能
2018/03/26 Python
python3+PyQt5实现柱状图
2018/04/24 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
迎国庆演讲稿
2014/09/15 职场文书
投资意向协议书
2015/01/29 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
Python办公自动化解决world文件批量转换
2021/09/15 Python
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python