概述`navigator.sendBeacon()` 设计用于在卸载/切换可见性场景下可靠地异步上报小数据(POST),不会阻塞卸载或下一次导航;若需非 POST、控制请求属性或读取响应,可以使用 `fetch()` 的 `keepalive: true`。用法与场景`sendBeacon(url, data)`:在 `visibilitychange/unload` 等事件中发送分析日志或会话结束数据;传输由浏览器在合适时机异步完成,不阻塞卸载[参考1,3,4]。`fetch(url, { method, body, keepalive: true })`:用于非 POST 或需要响应的上报;适合较复杂场景,触发时机与可靠性受事件与浏览器实现影响[参考1,2,4]。实践建议简单分析上报优先 `sendBeacon`;需要读取响应或更改方法则用 `fetch keepalive`。避免依赖 `beforeunload` 完成请求;优先 `visibilitychange` 与页面可见性控制。参考与验证[参考1]MDN:`navigator.sendBeacon()` 方法(异步POST与卸载不阻塞):https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon[参考2]讨论:`sendBeacon` vs `fetch keepalive` 的可靠性与场景取舍:https://stackoverflow.com/questions/79416970/navigator-sendbeacon-vs-fetch-keepalive-reliability-upon-browser-or-tab-close[参考3]MDN:Beacon API 概览(说明与 `sendBeacon`):https://developer.mozilla.org/en-US/docs/Web/API/Beacon_API[参考4]MDN 内容仓库:`sendBeacon` 文档(`keepalive` 说明与示例):https://github.com/mdn/content/blob/main/files/en-us/web/api/navigator/sendbeacon/index.md?plain=1关键词校验关键词与上报可靠性主题一致。

发表评论 取消回复