Javascript 如何捕获WebSocket连接中断?

Javascript 如何捕获WebSocket连接中断?,javascript,websocket,Javascript,Websocket,在Firefox中(至少),如果你按下ESC键,那么它将关闭所有打开的WebSocket连接。 我需要捕捉断开的情况,并在它再次可用时尝试重新连接 下面是一个我试图实现的代码示例,但我想不出任何东西能够捕获错误并让我优雅地处理它 请看一下代码: 打开控制台并观察输出 我在这里是做错了什么,还是因为连接在JS脚本的范围之外运行而不可能 任何意见都会有帮助 谢谢 您可以将处理程序附加到socket.onclose事件。当您按ESC键且连接中断时,将调用该命令 见: 您目前无法解决的一个问题是输出到控

在Firefox中(至少),如果你按下ESC键,那么它将关闭所有打开的WebSocket连接。 我需要捕捉断开的情况,并在它再次可用时尝试重新连接

下面是一个我试图实现的代码示例,但我想不出任何东西能够捕获错误并让我优雅地处理它

请看一下代码:

打开控制台并观察输出

我在这里是做错了什么,还是因为连接在JS脚本的范围之外运行而不可能

任何意见都会有帮助


谢谢

您可以将处理程序附加到
socket.onclose
事件。当您按ESC键且连接中断时,将调用该命令

见:


您目前无法解决的一个问题是输出到控制台的中断错误。目前恐怕没有办法捕捉到这一点。

你抓不到,这不是你的错。这是FireFox漏洞。在这里投票赞成:

我亲自尝试了各种解决方案:

事件处理程序onunload onbeforeunload onclose try..捕获一些处理第三方服务的js错误等

您可以登录控制台您的套接字,卸载前它已关闭,但FF认为不同..:(

解决方案(不直接回答问题,但有效):

这是一个bug,所以您无法捕获,但此信息不是解决方案。经过各种疯狂的解决方法并尝试捕获该bug后,我终于发现它可以工作。如果您使用socket.io与WebCokets一起工作,它可以与不同的传输技术一起工作。xhr轮询可以与Firefox一起工作

if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { //test for Firefox/x.x     or Firefox x.x (ignoring remaining digits);
    socket = io.connect('//' + node_server + '/', {
        transports: ['polling']
    });
} else {
    socket = io.connect('//' + node_server + '/');
}
什么帮助了我-可能也会帮助你:


您应该调用
socket.send()
onopen
回调中,由于1秒后可能仍无法建立连接。我知道这一点,知道如何处理,但这不是我要问的问题。在firefox 27中,ESC按钮问题似乎已解决。是的,这是我所担心的,我只需要验证它。我已经有一个
onclose
事件处理它,但希望取消异常。感谢您的输入!目前您无法解决的一个问题是输出到控制台的中断错误。在任何规范或文档中是否有提及此问题?
if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { //test for Firefox/x.x     or Firefox x.x (ignoring remaining digits);
    socket = io.connect('//' + node_server + '/', {
        transports: ['polling']
    });
} else {
    socket = io.connect('//' + node_server + '/');
}