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

时间:2012-08-07 19:01:24

标签: javascript jquery html5 websocket onbeforeunload

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

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

我希望在卸载页面时,浏览器会有先见之明地为我调用close(),但如果没有,我怎样才能利用onbeforeunload消息(或者某些消息)这样做“最终清理”(与C中的atexit()不同)?

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

我现在可以这样做:

$(window).on('beforeunload', function () {
    websocket.close(); // websocket is a WebSocket
});

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

2 个答案:

答案 0 :(得分:1)

window.onunload=function(){
//your code here
}

我想我们确实有这个。

答案 1 :(得分:1)

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