2012-11-29 25 views
11

Firefox'ta (en azından), ESC'ye basarsanız, tüm açık WebSockets bağlantılarını kapatır. Bu bağlantıyı kesmem gerekiyor ve tekrar kullanıma sunulduğunda yeniden bağlanmaya çalışıyorum.WebSocket bağlantısı kesintisini nasıl yakalarım?

İşte uygulamak denedim kod örneği, ama hiçbir şey hatası yakalamak ve bana incelikle ele sağlayacak buluruz.

koduna göz at: En konsolda http://jsfiddle.net/w5aAK/

var url = "ws://echo.websocket.org"; 
    try { 
     socket = window['MozWebSocket'] ? new MozWebSocket(url) : new WebSocket(url); 
     socket.onopen = function(){ 
      console.log('Socket is now open.'); 
     }; 
     socket.onerror = function (error) { 
      console.error('There was an un-identified Web Socket error'); 
     }; 
     socket.onmessage = function (message) { 
      console.info("Message: %o", message.data); 
     }; 
    } catch (e) { 
     console.error('Sorry, the web socket at "%s" is un-available', url); 
    } 

setTimeout(function(){ 
    socket.send("Hello World"); 
}, 1000); 

açın ve çıkış izleyin.

burada yanlış bir şey yapıyor muyum veya bağlantı JS komut kapsamı dışında çalışıyor çünkü bu sadece mümkün değil mi?

Herhangi giriş yararlı olacaktır.

Teşekkürler!

+1

Sen socket.send ('çağırmalıdır)' dahilinde 'onopen' geri arama 1 saniye sonra hala bağlantı kurulamayabilir. – neevek

+1

Bunun farkındayım ve nasıl kullanılacağını biliyorum, ama bu sorduğum soru değil. – Zach

+0

ESC düğmesi sorunu, firefox 27 – Tieme

cevap

5

Sen socket.onclose olaya bir işleyici ekleyebilirsiniz. ESC'yi vurduğunuzda ve bağlantı kesildiğinde çağrılır.

Bkz: Şimdilerde etrafında alamayan http://jsfiddle.net/w5aAK/1/

Bir problem konsoluna kesintiye hata olma çıkıştır. Korktuğum anda bunu yakalamanın bir yolu yok.

+1

'da sabit görünüyor. Evet, korktum buydu, sadece doğrulamak gerekiyordu. Bunu halledecek bir “onclose” olayım var, ama bir istisnayı geçersiz kılmayı umuyordum. Girdiniz için teşekkürler! – Zach

+3

_Orada olamayacağınız bir sorun, konsolda çıkarılan kesintili hatadır. Herhangi bir özellik veya belgede buna bir yönlendirme var mı? –

1

Bunu yakalamak edemez ve bu senin hatan değil. FireFox hatası. Burada bunun için Oy:

https://bugzilla.mozilla.org/show_bug.cgi?id=712329

Şahsen çözümlerin her türlü çalıştı:

olay işleyicileri onunload onbeforeunload OnClose try..catch vb 3. taraf hizmetlerin işleme bazı js hatası

Eğer soket teselli etmeye oturum açabilir, bu boşaltma önce kapalı ama FF farklı düşünür oluyor .. :(

Çözüm ( cevabı doğrudan cevap, ama o inşaat değil):

Bir böcek, sen yakalamak olamaz yani, ancak bu bilgilerin Çözüm değildir. Her türlü çılgın geçici çözümden sonra ve bu hatayı yakalamaya çalıştığında, sonunda bu çalışmayı buldum. WebScokets ile çalışmak için socket.io kullanırsanız, farklı ulaşım teknolojileri ile çalışabilir. xhr-polling, Firefox ile çalışır. bana yardımcı oldu ne

if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { //test for Firefox/x.x  or Firefox x.x (ignoring remaining digits); 
    socket = io.connect('//' + node_server + '/', { 
     transports: ['polling'] 
    }); 
} else { 
    socket = io.connect('//' + node_server + '/'); 
} 

- size çok yardımcı olabilir:

Web Socket support in Node.js/Socket.io for older browser

Define transport types on the client side

socket.io doens't work with transports: [ 'xhr-polling' ]

İlgili konular