You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firefox中关闭浏览器时visibilitychange事件未触发问题

Firefox关闭浏览器时visibilitychange事件未触发的解决办法

问题情况

要在浏览器关闭时发送分析数据,用visibilitychange事件搭配navigator.sendBeacon()实现的代码在Chrome里正常运行,但Firefox关闭浏览器时,这个事件监听器完全没触发。按相关文档说明,该事件本应在浏览器关闭时触发。

用到的代码如下:

document.addEventListener('visibilitychange', () => {
  if(document.visibilityState === 'hidden') {
    navigator.sendBeacon('http://localhost:3001')
  }
})

解决思路与代码

Firefox在处理浏览器/标签页关闭动作时,visibilitychange事件的触发存在兼容性问题,这时候可以结合pagehide事件来覆盖这个场景,同时保留visibilitychange处理切换标签等其他页面隐藏的情况:

function sendAnalytics() {
  if (document.visibilityState === 'hidden' || event.type === 'pagehide') {
    navigator.sendBeacon('http://localhost:3001');
  }
}

document.addEventListener('visibilitychange', sendAnalytics);
document.addEventListener('pagehide', sendAnalytics);

额外注意事项:

  • pagehide事件在页面卸载(包括关闭标签、浏览器)时会触发,Firefox对该事件的支持更稳定
  • 避免使用beforeunload事件,它会干扰用户关闭页面的操作,而且sendBeacon在该事件中的执行也不可靠
  • 如果请求是跨域的,要确保目标服务器配置了正确的CORS规则,防止请求失败

内容的提问来源于stack exchange,提问作者prajot surey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:42:04