关闭/刷新浏览器,刷新页面发送请求解决方案

Posted 哈娄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关闭/刷新浏览器,刷新页面发送请求解决方案相关的知识,希望对你有一定的参考价值。

目录

需求背景:

踩坑记录:

最终方案:


需求背景:

记录登录时长,退出/异常退出的时候请求退出接口,完成退出标记,后端统计时长。

踩坑记录:

  • 在onbeforeunload时机进行发送请求, 后加了关闭浏览器提醒弹窗(可取消关闭)功能, 导致此时机请求是不对的。
  • 在onunload时机请求,关闭/刷新 浏览器操作时 发送的ajax会被浏览器取消掉,不会发出或者发送失败。
  • 网上查找使用ajax同步,实践也会被取消掉不会发出请求。

最终方案:navigator.sendBeacon

navigator.sendBeacon(url, data)。使用blob方法传对象格式参数给后端。(请求记录可使用抓包工具查看, 浏览器network看不到)

此方法是无阻塞请求,不会影响页面的交互卡顿

window.onunload = () => 
        const data =  cno: 222 
        const blob = new Blob([ JSON.stringify(data) ], 
            type: 'application/json; charset=UTF-8',
        )
        navigator.sendBeacon(url, blob)

以上是关于关闭/刷新浏览器,刷新页面发送请求解决方案的主要内容,如果未能解决你的问题,请参考以下文章

当页面关闭时向后台发送请求

使用onbeforeunload事件检测窗口是否刷新或关闭 .

子窗口关闭,父窗口如何刷新

如何让访问网站时页面自动刷新两次?

本地存储和cookie

Opera:检测后退、前进、刷新和关闭事件