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 播放器 控制
Jan 22 Javascript
syntaxhighlighter 使用方法
Jul 02 Javascript
jQuery和AngularJS的区别浅析
Jan 29 Javascript
JQuery中DOM事件合成用法实例分析
Jun 13 Javascript
JavaScript 函数模式详解及示例
Sep 07 Javascript
JS中常用的正则表达式
Sep 29 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
Oct 20 Javascript
微信小程序 less文件编译成wxss文件实现办法
Dec 05 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
vue强制刷新组件的方法示例
Feb 28 Javascript
vue 组件销毁并重置的实现
Jan 13 Javascript
js实现扫雷源代码
Nov 27 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
合作指挥官:孟斯克
2020/03/16 星际争霸
php中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
完美解决PHP中的Cannot modify header information 问题
2013/08/12 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
Python的ORM框架中SQLAlchemy库的查询操作的教程
2015/04/25 Python
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
遗传算法python版
2018/03/19 Python
python监控文件并且发送告警邮件
2018/06/21 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
Pycharm中import torch报错的快速解决方法
2020/03/05 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
一个SQL面试题
2014/08/21 面试题
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
思想汇报格式
2014/01/05 职场文书
领导接待方案
2014/03/13 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
党员领导干部承诺书
2014/05/28 职场文书
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android