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 相关文章推荐
Mozilla 表达式 __noSuchMethod__
Apr 05 Javascript
动态添加option及createElement使用示例
Jan 26 Javascript
jquery判断元素是否隐藏的多种方法
May 06 Javascript
纯js实现无限空间大小的本地存储
Jun 18 Javascript
JavaScript验证Email(3种方法)
Sep 21 Javascript
Node.js dgram模块实现UDP通信示例代码
Sep 26 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
Nov 14 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
Apr 14 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 Javascript
如何修改Vue打包后文件的接口地址配置的方法
Apr 22 Javascript
详细聊聊浏览器是如何看闭包的
Nov 11 Javascript
HTML+JS实现在线朗读器
Feb 15 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
解决控件遮挡问题:关于有窗口元素和无窗口元素
2007/01/28 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
js对象的复制继承实例
2015/01/10 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
十条建议帮你提高Python编程效率
2016/02/16 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python 字典与字符串的互转实例
2017/01/13 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
2019/05/27 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
农村婚礼主持词
2014/03/13 职场文书
加入学生会演讲稿
2014/04/24 职场文书
汽车广告策划方案
2014/05/31 职场文书
园林技术专业求职信
2014/07/28 职场文书
安全承诺书
2015/01/19 职场文书
2015年中秋节活动总结
2015/03/23 职场文书
生产现场禁烟通知
2015/04/23 职场文书
2015新员工工作总结范文
2015/10/15 职场文书