我想弄清楚卸载事件是如何工作的。当用户移动到另一个页面时,我正在使用$(window).unload()
处理程序向我的分析服务发送几个自定义值的列表。我为每个值对服务进行单独的API调用。
我只是想知道我是否可以依赖我的处理程序每次运行直到它完成,或者是否有一些情况下加载下一页的JavaScript会在它注册列表中的所有值之前中断它。
.unload()上的jQuery documentation说“用.preventDefault()取消卸载事件是不可能的。”对我而言,这意味着在浏览器开始执行卸载处理程序之后,无法将其从加载,解析和执行新页面的JS中恢复。
但MDN page事件中的window.onunload
说:“在卸载事件发生后,资源移除将被处理。”
那么这是否意味着浏览器运行页面的卸载功能直到它完成,然后才将其废弃以加载下一页的JS?
MDN似乎在他们的网站上有多个版本。 Here's another one about unload which describes the state of the document during unload.
unload
卸载文档或子资源时会触发unload事件。
它被解雇后:
- beforeunload(可取消事件)
- pagehide
该文件处于特定状态:
- 所有资源仍然存在(img,iframe等)
- 最终用户不再可见
- UI交互无效(window.open,alert,confirm等)
- 错误不会停止卸载工作流程
据我所知,异步请求(ajax)可能会被触发但不能保证它们会到达服务器甚至脱离浏览器。
在您的某个标记(分析)的上下文中,您似乎想知道用户何时离开该页面。
unload
内执行。下次您的脚本遇到cookie时,将其解析为待处理数据并将其发送到服务器。