在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选项卡