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 相关文章推荐
JavaScript 10件让人费解的事情
Feb 15 Javascript
jquery $.getJSON()跨域请求
Dec 21 Javascript
iframe子父页面调用js函数示例
Nov 07 Javascript
Jquery在指定DIV加载HTML示例代码
Feb 17 Javascript
动态创建script标签实现跨域资源访问的方法介绍
Feb 28 Javascript
jquery修改网页背景颜色通过css方法实现
Jun 06 Javascript
详解Javascript 装载和执行
Nov 17 Javascript
JavaScript中document.forms[0]与getElementByName区别
Jan 21 Javascript
JavaScript中pop()方法的使用教程
Jun 09 Javascript
Javascript快速实现浏览器系统通知
Aug 26 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
Jan 02 Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 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文本数据库的搜索方法
2006/10/09 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
javascript 鼠标滚轮事件
2009/04/09 Javascript
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
JS继承 笔记
2011/07/13 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
Node使用Nodemailer发送邮件的方法实现
2020/02/24 Javascript
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
python中安装模块包版本冲突问题的解决
2017/05/02 Python
python中kmeans聚类实现代码
2018/02/23 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
不同浏览器创建XMLHttpRequest方法有什么不同
2014/11/17 面试题
师说教学反思
2014/02/07 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
2021/04/27 Python
Win11黑色桌面背景怎么办?Win11黑色壁纸解决方法汇总
2022/04/05 数码科技
MySQL导致索引失效的几种情况
2022/06/25 MySQL