如何确保在页面卸载之前始终调用代码

Ste*_* Lu 5 html javascript jquery onbeforeunload websocket

通常这并不重要,对于我的情况来说甚至可能不太重要,但我想知道是否有合理的方法来实现这一点。

我的页面自动打开网络套接字连接。为了成为一个更好的客户端,我希望客户端在页面卸载之前自行清理并关闭 websocket。

我希望浏览器能够close()在页面卸载时有先见之明来呼叫我,但如果没有,我如何利用该onbeforeunload消息(或类似的消息)来进行一些“最终清理”(atexit()与C)?

假设我有一些系统,我希望我的客户端出于某种原因向我的 websocket 服务器发送“退出”消息。

我现在可以这样做:

$(window).on('beforeunload', function () {
    websocket.close(); // websocket is a WebSocket
});
Run Code Online (Sandbox Code Playgroud)

但假设close()实际上是一个异步调用(是吗?),我想确保在实际卸载页面之前触发 socket.onclose 回调!这可以做到吗?

epa*_*llo 1

没有可靠的方法可以确保异步调用在现代浏览器中完全执行。旧版本可以用 while 循环来阻止,但当前的浏览器将终止任何进程并继续。原因是他们希望用户体验更快,你阻止他们会对他们造成伤害。