我试图弄清楚unload事件的工作方式。当用户移动到另一个页面时,我正在使用$(window).unload()处理程序将多个自定义值的列表发送到我的分析服务。我针对每个值对服务进行单独的API调用。

我只是想知道我是否可以依靠我的处理程序每​​次运行直到完成,还是在某些情况下加载下一页JavaScript会中断它,然后才能在列表中注册所有值。

.unload()上的jQuery documentation表示“无法使用.preventDefault()取消卸载事件。”对我来说,这意味着浏览器开始执行您的卸载处理程序后,无法阻止它加载,解析和执行新页面的JS。

但是window.onunload事件上的MDN page表示“发生卸载事件后,将处理资源删除。”

那么,这是否意味着浏览器会运行页面的卸载功能直到完成,然后才将其抓取以加载下一页的JS?

最佳答案

MDN似乎在其站点中具有多个版本。 Here's another one about unload which describes the state of the document during unload.

据我所知,异步请求(ajax)可能会被触发,但不能保证它们会到达服务器甚至离开浏览器。

在带有您的标记(分析)之一的上下文中,您似乎想知道用户何时离开页面。

  • 为什么不对服务器执行心跳/常规ping?最近一次已知的ping可以用作对该用户上次在该页面上被看到的时间的估计。
  • 或将用户离开页面的时间存储在cookie内,例如某种“待处理的报告”。这可以在unload中执行。下次您的脚本遇到Cookie时,请对其进行解析以获取暂挂数据,然后将其发送到服务器。
  • 关于javascript - 是否可以保证卸载事件处理程序在下一页加载清除之前完成执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21986979/

    10-09 01:21