具身智能落地实战:12个产线想法的生死验证
2026/7/17 4:27:03
navigator.sendBeacon() 是现代浏览器提供的一个 API,用于在页面卸载(如关闭标签页、导航到其他页面)时,异步且可靠地向服务器发送少量数据(如日志、分析数据等)。它解决了传统 XMLHttpRequest 或 fetch 在页面卸载时可能因浏览器终止任务而失败的问题。
constsuccess=navigator.sendBeacon(url,data);window.addEventListener('beforeunload',()=>{constdata=JSON.stringify({event:'page_close',time:Date.now()});navigator.sendBeacon('/analytics',data);});constformData=newFormData();formData.append('feedback','User comment...');navigator.sendBeacon('/submit',formData);| 方法 | 阻塞页面卸载 | 可靠性 | 数据大小 | 适用场景 |
|---|---|---|---|---|
| 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).');}navigator.sendBeacon() 是处理页面卸载时数据上报的最佳实践,尤其适合日志、埋点等场景。它的异步非阻塞特性和高可靠性使其成为传统方法的理想替代方案。使用时需注意数据大小和兼容性,并避免依赖其响应结果。