【JS Web API】navigator.sendBeacon

2026-04-21 17:01:18

navigator.sendBeacon() 会在页面卸载时,如关闭、刷新或跳转时可靠地、异步地发送少量数据到服务器的 API。
它的出现是为了解决传统方法如异步 XMLHttpRequest 或 fetch 在页面卸载阶段因请求被浏览器取消而导致数据丢失的问题。

浏览器会保证将 sendBeacon 请求加入一个内部队列,即使页面已经开始卸载或关闭,也会在后台尝试发送。
并且发送过程不会阻塞页面的卸载流程,也不会延迟下一个页面的加载,用户体验不受影响。
只需提供目标 URL 和要发送的数据即可,无需处理服务器响应。
非常适合在会话结束时发送分析数据、用户行为日志、错误报告或表单自动保存等场景。

语法: navigator.sendBeacon(url, data)
• url 数据发送的目标地址;
• data 非必填,支持 ArrayBuffer、Blob、FormData、DOMString(字符串)、URLSearchParams 等多种数据类型。若需发送 JSON 数据,通常需将其转换为字符串或包装成 Blob 类型。

说明:
• 返回一个布尔值。true 仅表示数据成功加入了发送队列,而非请求成功;false 表示因数据过大或 URL 无效等原因未能入队;
• 只支持 HTTP POST 方法;
• 有数据大小限制,通常建议在 64KB 以内,超出可能被丢弃;
• 无法自定义请求头,意味着不能在请求头中加 token 做认证。

示例:

const data = { user: 'dkvirus' }
const blob = new Blob([JSON.stringify(data)], { type: 'application/json' })
navigator.sendBeacon('/api/v1/sync/data', blob)

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: