移动浏览器在关闭浏览器时不会触发 `beforeunload`/`onload`

Posted

技术标签:

【中文标题】移动浏览器在关闭浏览器时不会触发 `beforeunload`/`onload`【英文标题】:Mobile browsers don't trigger `beforeunload`/`onload` when closing browser 【发布时间】:2020-11-06 03:08:53 【问题描述】:

我在移动浏览器上工作了大约 3 个月,现在我遇到了 beforeunloadonload 的无聊问题。在两种情况下,它们不能清楚地工作。当我关闭选项卡时,浏览器经常调用它们。但是,当用户通过一些例程关闭浏览器时,为什么它根本不触发这些事件?有什么问题?

【问题讨论】:

根据 MDN 文档,自 Chrome for Androied 版本 18 和 Firefox for android 版本 4 起支持 beforeunloadload 事件。请提供相关代码的最小部分,以便我们提供帮助你更好。 为了防止不需要的弹出窗口,浏览器可能不会显示在 beforeunload 事件处理程序中创建的提示,除非页面已经被交互过,或者甚至可能根本不显示它们。消息来源:developer.mozilla.org/en-US/docs/Web/API/Window/… 【参考方案1】:

“许多开发人员将卸载事件视为有保证的回调,并将其用作会话结束信号来保存状态和发送分析数据,但这样做非常不可靠,尤其是在移动设备上!卸载事件不会触发在许多典型的卸载情况下,包括从移动设备上的标签切换器关闭标签或从应用切换器关闭浏览器应用。

因此,最好依靠visibilitychange 事件来确定会话何时结束,并将隐藏状态视为保存应用和用户数据的最后可靠时间。”

来源:Page Lifecycle API

【讨论】:

以上是关于移动浏览器在关闭浏览器时不会触发 `beforeunload`/`onload`的主要内容,如果未能解决你的问题,请参考以下文章

移动端软键盘收起监听

js 浏览器窗口 刷新关闭事件

浏览器事件:当您使元素可见(并且鼠标在其上)时,不会发生鼠标悬停]]

移动端使用fastclick时,模拟原生浏览器对象

Bootstrap 3 模态触发并导致页面暂时向左移动/浏览器滚动条问题

如何在浏览器关闭时触发事件[重复]