socket.io firefox 中没有触发连接事件

socket.io connection event not firing in firefox

我有类似下面的代码。

<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客户端

我用下面的代码解决了。不是很干净,但暂时这有助于我们推进项目。如您所见,问题是连接事件在页面重新加载后未触发,因此我决定在连接从未触发的情况下在超时后附加事件。

function attachEventListners() {
    socket.on('some-event', function(data) {});
}

var attached = false;
socket.on('connect', function(){
      attachEventListners();
      attached = true;
});

setTimeout(function() {
    if (!attached) {
        attachEventListners();
    }
}, 1000);

您不必在 connect 侦听器中声明事件侦听器,所以即使我不知道您的问题的直接解决方案,我认为这会解决它:

<script>
  var socket = io('http://localhost:8080');
  socket.on('some-event', function(data) {});
  socket.on('disconnect', function(){});
</script>

因为能够接收到消息就意味着socket已经连接上了。

您应该在 window

上使用加载事件侦听器而不是超时
window.addEventListener("load",attachEventListners);