2016-09-11 21 views
10

Có một số thứ giống như mã bên dưới.Sự kiện kết nối socket.io không kích hoạt trong 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> 

Bên trong kết nối gọi lại Tôi có một số mã phản hồi thư. Điều này hoạt động hoàn toàn tốt trên chrome. Khi tải trang đầu tiên, nó hoạt động tốt trên firefox. Nếu bạn tải lại trang thì sự kiện kết nối sẽ không được gọi.

Im sử dụng phiên bản 1.4.8 của máy chủ và máy khách js

+0

Liệu sự giúp đỡ này ở tất cả: http://stackoverflow.com/questions/17298950/socket-io-not-working- trong chrome-and-firefox-on-windows –

Trả lời

2

Tôi đã giải quyết bằng cách sử dụng mã sau đây. Không phải là rất sạch sẽ nhưng trong thời gian này đã giúp chúng tôi tiến bộ với dự án. Như bạn có thể thấy vấn đề là sự kiện kết nối không kích hoạt sau khi tải lại trang, vì vậy tôi đã quyết định đính kèm các sự kiện sau một khoảng thời gian chờ nếu kết nối không bao giờ được kích hoạt.

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

Bạn không cần phải khai báo nghe sự kiện bên trong một người biết lắng nghe connect, vì vậy mặc dù tôi không biết một giải pháp trực tiếp cho vấn đề của bạn, tôi nghĩ rằng đây sẽ làm việc xung quanh nó:

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

Vì có thể nhận tin nhắn ngụ ý rằng ổ cắm được kết nối.

+0

Đó là điều đầu tiên mà tôi đã thử, tiếc là nó không hoạt động. – Prasanth

+0

Cần (xem thêm [mã ví dụ chính thức] (http://socket.io/docs/#using-with-node-http-server)). Nếu không, nó có thể được gây ra bởi cùng một vấn đề đó cũng gây ra vấn đề FF của bạn thiếu sự kiện 'connect'. – robertklep

0

Thay vì một thời gian chờ, bạn nên sử dụng các event listener tải trên cửa sổ

window.addEventListener("load",attachEventListners); 
Các vấn đề liên quan