【问题标题】:socket.io connection event not firing in firefoxsocket.io 连接事件未在 Firefox 中触发
【发布时间】:2017-01-18 22:10:10
【问题描述】:
我有类似下面的代码。
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io('http://localhost:8080');
socket.on('connect', function(){
socket.on('some-event', function(data) {});
});
socket.on('disconnect', function(){});
</script>
在连接回调中,我有一些响应消息的代码。这在 chrome 上工作得很好。在第一页加载时,它在 Firefox 上运行良好。如果您重新加载页面,则不会调用连接事件。
我使用的是1.4.8版本的服务器和js客户端
【问题讨论】:
标签:
socket.io
socket.io-1.0
【解决方案1】:
我使用以下代码解决了它。不是很干净,但暂时这有助于我们推进项目。如您所见,问题是页面重新加载后连接事件未触发,因此我决定在超时后附加事件,如果从未触发连接。
function attachEventListners() {
socket.on('some-event', function(data) {});
}
var attached = false;
socket.on('connect', function(){
attachEventListners();
attached = true;
});
setTimeout(function() {
if (!attached) {
attachEventListners();
}
}, 1000);
【解决方案2】:
您不必在 connect 侦听器中声明事件侦听器,因此即使我不知道您的问题的直接解决方案,我认为这会解决它:
<script>
var socket = io('http://localhost:8080');
socket.on('some-event', function(data) {});
socket.on('disconnect', function(){});
</script>
因为能够接收消息就意味着套接字已连接。
【解决方案3】:
您应该在窗口上使用加载事件侦听器,而不是超时
window.addEventListener("load",attachEventListners);