news 2026/7/7 20:26:02

navigator.sendBeacon方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
navigator.sendBeacon方法

navigator.sendBeacon() 是现代浏览器提供的一个 API,用于在页面卸载(如关闭标签页、导航到其他页面)时,异步且可靠地向服务器发送少量数据(如日志、分析数据等)。它解决了传统 XMLHttpRequest 或 fetch 在页面卸载时可能因浏览器终止任务而失败的问题。

1. 核心特性

  • 异步发送
    • 数据发送不会阻塞页面卸载流程,适合在 beforeunload、unload 等事件中发送数据。
  • 可靠性
    • 浏览器会确保数据在后台发送,即使页面已卸载也会尝试完成传输(除非浏览器被强制关闭)。
  • 轻量级
    • 仅支持发送少量数据(通常限制为几 KB),格式为 Blob、FormData、ArrayBuffer 或字符串。
  • 无响应处理
    • 该方法返回 boolean,表示浏览器是否接受请求,但不会返回服务器响应(设计初衷是单向通信)。

2. 语法

constsuccess=navigator.sendBeacon(url,data);
  • url:目标服务器地址(必须同源或支持 CORS)。
  • data:要发送的数据(可选),可以是 Blob、FormData、ArrayBuffer 或字符串。
  • 返回值:true 表示浏览器已接受请求,false 表示失败(如数据过大或浏览器不支持)。

3. 使用场景

  1. 页面关闭时发送分析数据
    例如记录用户停留时间、最后操作等:
    window.addEventListener('beforeunload',()=>{constdata=JSON.stringify({event:'page_close',time:Date.now()});navigator.sendBeacon('/analytics',data);});
  2. 提交表单数据
    在卸载前发送用户输入(需配合 FormData):
    constformData=newFormData();formData.append('feedback','User comment...');navigator.sendBeacon('/submit',formData);

4. 注意事项

  1. 数据大小限制
    不同浏览器限制不同(通常 64KB 左右),超限会返回 false。
  2. CORS 配置
    目标 URL 需支持 CORS(尤其是跨域请求时)。
  3. 无回调机制
    如需确认服务器是否收到数据,需通过其他方式(如后续请求或 WebSocket)。
  4. 兼容性
    现代浏览器均支持,但旧版 IE 不兼容(可用 navigator.sendBeacon 存在性检测)。

5. 与替代方案对比

方法阻塞页面卸载可靠性数据大小适用场景
sendBeacon❌ 不阻塞✅ 高页面卸载时发送数据
fetch/XMLHttpRequest✅ 阻塞❌ 低实时交互(如 AJAX)
Image 对象❌ 不阻塞❌ 低简单跟踪(如埋点)

示例代码

// 发送 JSON 数据constdata=newBlob([JSON.stringify({key:'value'})],{type:'application/json'});constsuccess=navigator.sendBeacon('https://example.com/log',data);if(success){console.log('Beacon queued successfully.');}else{console.error('Failed to send beacon (data too large or unsupported).');}

6. 总结

navigator.sendBeacon() 是处理页面卸载时数据上报的最佳实践,尤其适合日志、埋点等场景。它的异步非阻塞特性和高可靠性使其成为传统方法的理想替代方案。使用时需注意数据大小和兼容性,并避免依赖其响应结果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 17:05:01

代码背后的人性试金石——软件测试伦理困境与职业操守探析

当代码遇见良知 在数字化浪潮席卷全球的今天,软件测试已从单纯的技术验证演变为关乎用户安全、企业声誉甚至社会稳定的关键环节。据统计,2024年因软件缺陷导致的全球经济损失高达1.7万亿美元,而其中近30%的问题在测试环节本可以被发现却被有…

作者头像 李华
网站建设 2026/7/7 2:19:08

Docassemble终极指南:5步构建智能法律文档生成系统

在法律和商业领域,文档处理往往占据专业人士大量时间和精力。传统的手工文档制作不仅效率低下,还容易出错。智能文档生成和法律自动化技术正在彻底改变这一现状,让复杂的法律文书制作变得简单高效。 【免费下载链接】docassemble A free, ope…

作者头像 李华
网站建设 2026/7/7 15:07:16

FaceFusion镜像已上线云市场,一键部署即享高性能服务

FaceFusion镜像已上线云市场,一键部署即享高性能服务 在视频内容爆炸式增长的今天,创作者对高效、高质量视觉特效工具的需求从未如此迫切。人脸替换技术早已不再是影视工业的专属——从短视频换脸恶搞,到虚拟偶像直播互动,再到数字…

作者头像 李华
网站建设 2026/7/7 8:12:38

开发者福音:一键部署FaceFusion镜像,节省90%配置时间

开发者福音:一键部署FaceFusion镜像,节省90%配置时间 在视频内容爆炸式增长的今天,从虚拟主播到数字人直播,从影视后期到个性化广告,高质量的人脸编辑能力正成为AI应用中的“硬通货”。然而,一个现实问题长…

作者头像 李华
网站建设 2026/7/7 9:09:09

如何高效驾驭Open-AutoGLM?这6条命令是命令行模式的黄金法则

第一章:Open-AutoGLM 命令行模式常用指令汇总在使用 Open-AutoGLM 时,命令行模式提供了高效、灵活的交互方式,适用于自动化任务与批量处理。通过 CLI 指令,用户可快速调用模型推理、参数配置、任务调度等功能。启动服务 使用以下命…

作者头像 李华
网站建设 2026/7/7 17:53:46

FaceFusion镜像安全性验证通过,可放心用于商业项目

FaceFusion镜像安全性验证通过,可放心用于商业项目 在短视频、虚拟内容和数字人技术迅猛发展的今天,人脸替换已不再是影视特效工作室的专属能力。越来越多的内容创作者、广告公司乃至企业级应用开始探索如何将高质量的人脸编辑技术融入生产流程。然而&am…

作者头像 李华