在Socket.io的Firefox上,“websocket在页面加载时中断”

Error: The connection to <websocket> was interrupted while the page was loading. Source File: localhost/socket.io/node_modules/socket.io-client/dist/socket.io.js Line: 2371 

我是socket.io的新手,我试图search这个,但是我没有得到答案。

当我刷新Firefox的页面时,WebSocket被中断。 这就是为什么服务器端正在等待授权客户端。

这是代码:

 server.js--> var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , fs = require('fs') app.listen(8080); function handler (req, res) { fs.readFile(__dirname + '/index.html', function (err, data) { if (err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); }); } io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { //alert(JSON.stringify(data)); console.log(data); }); }); 

的index.html

 <script src="node_modules/socket.io-client/dist/socket.io.js"></script> <script> var socket = io.connect('http://localhost:8080'); socket.on('news', function (data) { alert(JSON.stringify(data)); console.log(data); socket.emit('my next event', { my: 'data' }); }); </script> 

这是因为,你没有closures你打开的websocket。

此代码将删除此错误:

 $(window).on('beforeunload', function(){ socket.close(); }); 

这似乎是Firefox中的一个开放的错误(截至2015-03-29):

https://bugzilla.mozilla.org/show_bug.cgi?id=712329

解决方法(现在)是在卸载之前在websocket上调用close(),就像Alexander指出的那样。

更新2016-04 :根据Bugzilla,这将在Firefox 48中修复

我刚刚通过Socket.IO教程,我遇到了这个确切的问题。 我尝试了解决scheme,但他们似乎并没有工作。

经过一番捣乱,一些尖叫声和一些橡皮擦,我终于明白了这个问题是什么。 问题是它试图在套接字variables正确初始化之前连接到套接字。 JavaScript嘘嘘#1。

如果你会推荐你的文件包含jQuery,然后包装你的function,如下所示:

  <script src="/socket.io/socket.io.js"></script> <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script> <script> $(function(){ var socket = io.connect('http://localhost:8080'); socket.on('news', function (data) { alert(JSON.stringify(data)); console.log(data); socket.emit('my next event', { my: 'data' }); }); }); </script> 

这对你的应用程序有什么影响? 我的猜测是,在控制台中看到错误并不是很好。

这里的问题是,你看到Firefox的login这个错误,没有什么可以做的。 用try...catch块或通过websocket.onerror / websocket.onclose捕获这个错误是不可能的。

请参阅: 如何捕获WebSocket连接中断?

有关:

  • 应该WebSocket.onclose触发用户导航或刷新?
  • Firefox – 竞争条件允许幽灵WebSocket连接生活后closures选项卡