javascript - 卸载事件处理程序是否保证在加载下一页之前完成执行?

标签 javascript jquery browser analytics dom-events

我正在尝试了解卸载事件的工作原理。当用户移动到另一个页面时,我正在使用 $(window).unload() 处理程序将几个自定义值的列表发送到我的分析服务。我为每个值对服务进行单独的 API 调用。

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

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

但是MDN pagewindow.onunload 事件上说“卸载事件发生后处理资源移除。”

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

最佳答案

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

unload

The unload event is fired when the document or a child resource is being unloaded.

It is fired after:

  • beforeunload (cancellable event)
  • pagehide

The document is in a particular state:

  • all the resources still exist (img, iframe etc.)
  • nothing is visible anymore to the end user
  • UI interactions are ineffective (window.open, alert, confirm etc.)
  • an error won't stop the unloading workflow

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


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

  • 为什么不对服务器进行心跳/定期 ping?最后已知的 ping 可用作用户最后一次出现在该页面上的时间的估计值。

  • 或者将用户离开页面的时间存储在 cookie 中,例如某种“未决报告”。这可以在 unload 中执行。下次您的脚本遇到 cookie 时,让它解析待处理数据并将其发送到服务器。

关于javascript - 卸载事件处理程序是否保证在加载下一页之前完成执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21986979/

相关文章:

javascript - 许多类似的没有 ID 的 AJAX 建议框

javascript - JSP : How to link form select option to Java object

c# - javascript单引号问题

javascript - 如何中止 $.post 请求

jquery - 如何使用jquery在写入和读取时加密/解密cookie数据

browser - 为什么像 Chrome 这样的跨平台应用程序不使用 FreeType 来呈现文本?

Javascript 对象构造 : whats the difference?

javascript - 用于隐藏和显示 div 的 Dry jQuery

html - iOS浏览器的区别

javascript - 如何用JavaScript清除网站的缓存?