2016-09-11 8 views
10

Mam coś takiego jak poniższy kod.Zdarzenie połączenia socket.io nie wystrzeliwuje w 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> 

Wewnątrz połączenia zwrotnego Mam kod, który odpowiada na wiadomości. Działa to doskonale na chromie. Przy ładowaniu pierwszej strony działa dobrze na firefox. Jeśli ponownie załadujesz stronę, połączenie nie zostanie wywołane.

Im przy 1.4.8 wersję serwera i klienta js

+0

Czy to pomoże w ogóle: http://stackoverflow.com/questions/17298950/socket-io-not-working- in-chrome-and-firefox-on-windows –

Odpowiedz

2

I rozwiązać go za pomocą następującego kodu. Niezbyt czyste, ale na razie pomogło nam to w postępie projektu. Jak widać problem polega na tym, że zdarzenie connect nie jest uruchamiane po przeładowaniu strony, więc postanowiłem dołączyć zdarzenia po upływie limitu czasu, jeśli połączenie nigdy nie zostało uruchomione.

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

Nie musisz zadeklarować detektory zdarzeń wewnątrz connect słuchacza, więc nawet nie wiem, bezpośrednie rozwiązanie problemu, myślę, że to będzie obejść:

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

Ponieważ możliwość odbierania wiadomości oznacza, że ​​gniazdo jest podłączone.

+0

To pierwsza rzecz, którą wypróbowałem, niestety to nie zadziałało. – Prasanth

+0

Powinien (patrz również [oficjalny kod przykładowy] (http://socket.io/docs/#using-with-node-http-server)). Jeśli tak się nie stanie, może to być spowodowane tym samym problemem, który powoduje również problem z FF polegający na braku zdarzenia 'connect'. – robertklep

0

Zamiast timeout, należy skorzystać z detektora zdarzeń obciążenie oknie

window.addEventListener("load",attachEventListners);