浏览器关闭之前请求接口到后端

2025.07.24今天我学习了如何在浏览器关闭之前请求一个接口返回到后端。

可以用performance.navigation判断是浏览器关闭,还是浏览器刷新,因为我这边只需要浏览器关闭的时候才去触发

1. 利用performance API(刷新检测)
刷新页面时,performance.navigation.type的值为1;关闭或跳转时为0或2:javascript
window.addEventListener('beforeunload', function(e) {if (performance.navigation.type === 1) {console.log('用户正在刷新页面');} else {console.log('用户可能在关闭页面或跳转');}// 提示逻辑...
});

一、navigator.sendBeacon(只支持post请求)

window.addEventListener('beforeunload', function() {
const data = JSON.stringify({
userId: '12345',
sessionDuration: 1200,
pageViews: 5
});

navigator.sendBeacon('/api/analytics', data);
});

二、fetch(需要把keepalive设置为true,支持携带token)

window.addEventListener('beforeunload', () => {fetch(`/api/analytics`, {method: 'POST',headers: {'Content-Type': 'application/json','Authorization': 'Bearer ' + getToken()},body: JSON.stringify({userId: '12345',sessionDuration: 1200,pageViews: 5}),keepalive: true  // 保证页面关闭后仍发送});
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916520.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916520.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL批量数据处理与事务管理

MySQL是一种广泛应用的关系型数据库管理系统,尤其在数据分析和业务逻辑处理方面具有重要地位。在数据量庞大的业务场景中,批量数据处理和事务管理是提高效率和保障数据一致性的重要手段。掌握高效的批量数据操作方法与事务管理技巧,不仅能够提…

iOS网络之异步加载

为什么你的图片要异步加载?在仿写天气预报时,我们常常需要从网络加载天气图标,例如显示某个小时的天气状态图标。这看似简单的事情,如果处理不当,却很容易造成界面卡顿,甚至影响整个 App 的用户体验。错误做…

C#值类型属性的典型问题

问题复现:值类型属性的副本问题以下代码展示了值类型属性的典型问题:struct Point {public int X;public int Y; }class MyClass {public Point Position {get; set;} }// 使用属性修改结构体(无效!) var obj new MyC…

机器学习基础-k 近邻算法(从辨别水果开始)

一、生活中的 "分类难题" 与 k 近邻的灵感 你有没有这样的经历:在超市看到一种从没见过的水果,表皮黄黄的,拳头大小,形状圆滚滚。正当你犹豫要不要买时,突然想起外婆家的橘子好像就是这个样子 —— 黄色、圆…

【WPF】NumericUpDown的用法

在 WPF(Windows Presentation Foundation)中,NumericUpDown 控件并不是内置的标准控件之一,但它是一个非常常用的控件,用于让用户输入一个数值(整数或浮点数),并提供上下箭头来递增或…

Kotlin位运算

Kotlin 提供了几种用于操作整数各个位(bit) 的运算符。这些操作是由处理器直接支持的,速度快且操作简单。在底层编程中非常重要,比如设备驱动、低级图形处理、网络通信、加密和压缩等。 尽管计算机通常都有高效的硬件指令来执行算…

墨者:通过手工解决SQL手工注入漏洞测试(MongoDB数据库)

一、SQL手工注入漏洞测试(MongoDB数据库) 本文以墨者学院靶场为例,演示MongoDB数据库的手工SQL注入全过程。靶场以自己的地址为准:http://124.70.71.251:42286/new_list.php?id1 二、注入原理说明 MongoDB作为NoSQL数据库,其注入方式与传…

Kafka——CommitFailedException异常处理深度解析

引言在分布式消息系统Kafka的生态中,消费者组(Consumer Group)机制是实现高吞吐量和负载均衡的核心设计。然而,消费过程中位移提交(Offset Commit)的稳定性始终是开发者面临的最大挑战之一。当消费者尝试提…

kafka的部署和jmeter连接kafka

zookeeper的安装 kafka依赖Zookeeper所以要先安装Zookeeper kafka的安装文章引用来源:Kafka下载和使用(linux版)-CSDN博客 通过wget命令安装 # 安装wget https://downloads.apache.org/zookeeper/stable/apache-zookeeper-3.7.1-bin.tar.gz# 解压tar…

Android UI 组件系列(八):ListView 基础用法与适配器详解

博客专栏:Android初级入门UI组件与布局 源码:通过网盘分享的文件:Android入门布局及UI相关案例 链接: https://pan.baidu.com/s/1EOuDUKJndMISolieFSvXXg?pwd4k9n 提取码: 4k9n 一、引言 在上一篇文章《Android UI 组件系列(…

Android学习专题目录(持续更新)

1.Android 调试 1.1:Logcat日志分析 2.Android编译 2.1:android编译过程中的mk文件和bp文件的扫描机制 2.2:Android 构建系统中常见的 .mk 文件及其作用 2.3:Android构建系统中的mk文件语法函数 2.4:安卓中定…

c#Lambda 表达式与事件核心知识点整理

一、Lambda 表达式1. 概念 Lambda 表达式是一种匿名函数(无名称的函数),简化了委托和匿名方法的写法,格式为: (参数列表) > 表达式或语句块 它可以作为参数传递,或赋值给委托类型变量。2. 基本语法与简写…

Springboot+Layui英语单词学习系统的设计与实现

文章目录前言详细视频演示具体实现截图后端框架SpringBootLayUI框架持久层框架MyBaits成功系统案例:参考代码数据库源码获取前言 博主介绍:CSDN特邀作者、985高校计算机专业毕业、现任某互联网大厂高级全栈开发工程师、Gitee/掘金/华为云/阿里云/GitHub等平台持续输…

主要分布于内侧内嗅皮层的层Ⅲ的边界向量细胞(BVCs)对NLP中的深层语义分析的积极影响和启示

边界向量细胞(Boundary Vector Cells, BVCs)主要分布于内侧内嗅皮层(MEC)层Ⅲ,通过编码环境边界(如墙壁、障碍物)的距离和方向信息,为空间导航提供几何参考框架。这一神经机制对自然…

Selenium是解决了什么问题的技术?

Selenium 是一种用于自动化浏览器操作的技术,主要解决了以下问题:1. 自动化测试 Selenium 最初是为了解决 Web 应用程序的自动化测试 问题而设计的。它可以帮助开发者和测试人员: 模拟用户操作:如点击按钮、填写表单、选择下拉菜单…

JavaSE知识点(2)

目录 访问修饰符的区别 this关键字的作用 抽象类和接口有什么区别 抽象类可以定义构造方法吗 但是接口不可以定义构造方法 Java支持多继承吗 接口可以多继承吗 继承和抽象的区别? 抽象类和普通类的区别 成员变量和局部变量的区别? staic关键字…

(实用教程)Linux操作系统(二)

centos配置静态ip 注意: 1.系统中的网关要与虚拟机编辑器中的网关保持一致 2.如果配置虚拟机编辑器后发现ping不通外网的时候,就要还原默认设置再进行配置 总结: 虚拟机编辑器需要配置ip,网关,其中ip网段以及最后一…

ThinkPHP8集成RabbitMQ的完整案例实现

ThinkPHP8集成RabbitMQ的完整案例实现一、安装依赖:需通过Composer安装php-amqplib库‌二、配置RabbitMQ三、生产者1、发送一个邮件,将任务发送到RabbitMQ队列中。2、运行结果展示四、启动消费者:命令行执行php think rabbitmq:consumer1&…

解密负载均衡:如何轻松提升业务性能

什么是负载均衡 负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了 公司业务的…

mac neo4j install verifcation

本文使用conda环境安装,neo4j所依赖jdk也采用conda install的方式安装。 1 neo4j下载 点击如下链接,选择community, Linux/Mac Executor,点击Download Community。 本文下载的安装包是 neo4j-community-2025.06.2-unix.tar.gz 2 安装neo4j …