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 相关文章推荐
DOMAssitant最新版 DOMAssistant 2.5发布
Dec 25 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
May 28 Javascript
jQuery实现跨域
Feb 03 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
May 09 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
Jun 16 Javascript
将鼠标焦点定位到文本框最后(代码分享)
Jan 11 Javascript
详解webpack+es6+angular1.x项目构建
May 02 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
Oct 23 Javascript
总结js中的一些兼容性易错的问题
Dec 18 Javascript
20个最常见的jQuery面试问题及答案
May 23 jQuery
JS返回页面时自动回滚到历史浏览位置
Sep 26 Javascript
vue axios请求频繁时取消上一次请求的方法
Nov 10 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
PHPEXCEL 使用小记
2013/01/06 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
TensorFlow高效读取数据的方法示例
2018/02/06 Python
彻底理解Python中的yield关键字
2019/04/01 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
使用pip安装python库的多种方式
2019/07/31 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
2021/03/04 Python
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
武汉东之林科技有限公司机试
2013/09/17 面试题
中专毕业自我鉴定
2013/10/16 职场文书
《小草和大树》教学反思
2014/02/16 职场文书
企业文化标语口号
2014/06/09 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python