2016-09-11 3 views
10

Im имеет что-то вроде приведенного ниже кода.socket.io событие подключения не срабатывает в 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> 

Внутри обратного вызова connect У меня есть код, который отвечает на сообщения. Это отлично работает на хроме. При загрузке первой страницы он отлично работает на firefox. Если вы перезагрузите страницу, событие connect не будет вызвано.

Im используя 1.4.8 версию сервера и клиента Js

+0

ли эта помощь на всех: http://stackoverflow.com/questions/17298950/socket-io-not-working- in-chrome-and-firefox-on-windows –

ответ

2

Я решил его, используя следующий код. Не очень чистый, но на данный момент это помогло нам продвинуться в этом проекте. Как видите, проблема связана с тем, что событие connect не запускается после перезагрузки страницы, поэтому я решил прикрепить события после таймаута, если соединение никогда не запускалось.

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

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

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

Вы не должны объявлять обработчики событий внутри connect слушателя, так что даже если я не знаю, прямое решение проблемы, я думаю, что это будет работать вокруг него:

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

Поскольку возможность приема сообщений подразумевает подключение сокета.

+0

Это первое, что я пробовал, к сожалению, это не сработало. – Prasanth

+0

Он должен (см. Также [официальный пример кода] (http://socket.io/docs/#using-with-node-http-server)). Если это не так, это может быть вызвано той же проблемой, которая также вызывает вашу проблему FF с отсутствием события 'connect'. – robertklep

0

Вместо тайм-аута, вы должны использовать приемник событий нагрузки на окне

window.addEventListener("load",attachEventListners);