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 相关文章推荐
CCPry JS类库 代码
Oct 30 Javascript
JavaScript面向对象程序设计三 原型模式(上)
Dec 21 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
Nov 24 Javascript
javascript使用location.search的示例
Nov 05 Javascript
基于javascript实现页面加载loading效果
Sep 15 Javascript
jQuery easyui刷新当前tabs的方法
Sep 23 Javascript
微信小程序 Storage API实例详解
Oct 02 Javascript
AngularJS改变元素显示状态
Apr 20 Javascript
JavaScript实现简单动态进度条效果
Apr 06 Javascript
vue中使用gojs/jointjs的示例代码
Aug 24 Javascript
微信小程序实现分享朋友圈的图片功能示例
Jan 18 Javascript
Vue接口封装的完整步骤记录
May 14 Vue.js
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加MYSQL服务器
2006/10/09 PHP
php 面向对象的一个例子
2011/04/12 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
JS实现放大镜效果
2020/09/21 Javascript
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python创建临时文件夹的方法
2015/07/06 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
Python字符串处理实现单词反转
2017/06/14 Python
Python内置模块logging用法实例分析
2018/02/12 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
老公爱的承诺书
2014/03/31 职场文书
诉前财产保全担保书
2014/05/20 职场文书
庆六一宣传标语
2014/10/08 职场文书
小学中队委竞选稿
2015/11/20 职场文书
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android