项目中常见在页面/游览器关闭时,需要做某些特定操作,
难点在于如何的监听,原生的使用方法有点绕。

beforeunload

用户关闭、刷新页面,关闭游览器等操作时会触发。
触发的同时游览器会弹出一个丑陋的类似 window.confirm 的窗口。
无法修改内容,无法替换,无法获取用户点击的结果,但是可以隐藏。

window.addEventListener('beforeunload', function (event) {
  // returnValue 只要设置了任意值,就会弹框提示用户。
  // 若不设置,则不会弹框。
  if (event) {
    e.returnValue = true
  }
  
  // 其他操作...
})

window.removeEventListener('beforeunload', handler)

unload

吐槽:这个事件,对于开发,并没有什么卵用

这玩意知道了就行了,实际上完全被 beforeunload 所替代。
理论上部分操作是需要在 “用户确定关闭/刷新页面后” 执行,
但是实际上在 unload 回调中,限制很多,
比如说无法发送请求等等等等…..

目前已知的可行操作:

  • 可以向 localStorage、sessionStorage 中写入。
window.addEventListener('unload', function () {
  // 限制太多,啥也干不了.....
})

window.removeEventListener('unload', handler)

总结

真的碰到了 “用户离开/刷新页面前执行特定逻辑” 的这种需求时,
建议用 beforeunload 事件,而不是 unload,因为限制太多了。
beforeunload 弹出的 “丑陋的框” 中,
不管用户点击的是什么,都执行逻辑,因为根本也获取不到用户点击的结果。