socket.io 连接事件未在 Firefox 中触发

Posted

技术标签:

【中文标题】socket.io 连接事件未在 Firefox 中触发【英文标题】:socket.io connection event not firing in 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客户端

【问题讨论】:

这有帮助吗:***.com/questions/17298950/… 【参考方案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>

因为能够接收消息就意味着套接字已连接。

【讨论】:

这是我尝试的第一件事,不幸的是它没有工作。 应该(另见the official example code)。如果没有,则可能是由同样的问题引起的,该问题也会导致您的 FF 问题丢失connect 事件。【参考方案3】:

您应该在窗口上使用加载事件侦听器,而不是超时

window.addEventListener("load",attachEventListners);

【讨论】:

以上是关于socket.io 连接事件未在 Firefox 中触发的主要内容,如果未能解决你的问题,请参考以下文章

MongoError:未在 db 上授权执行命令?与 socket.io 连接时

Socket io 未在 HTTPS 中将 nodejs 与 android(客户端)连接

socket.io 连接事件不起作用,为啥?

socket io客户端和服务器之间的连接问题

socket.io 1.2.1 如何在重新连接后修复双重事件

WatiN FireEvent 未在 FireFox 中传递事件属性