2011-03-04 11 views
6

मैं strophe.js और jQuery और मैं एक अनुपलब्ध उपस्थिति कमरे के लिए jQuery अनलोड घटना में उपयोगकर्ता भेजने और डिस्कनेक्ट करने के लिए कोशिश कर रहा हूँ का उपयोग कर एक वेब आधारित MUC ग्राहक लिखा है खिड़की। यदि कोई उपयोगकर्ता ब्राउज़र टैब को नेविगेट करता है या बंद करता है, तो उन्हें एमयूसी से लॉग आउट होना चाहिए।पृष्ठ पर डिस्कनेक्ट छंद कनेक्शन अनलोड

मैंने उस कोड का परीक्षण किया है जिसे मैं इस कार्यक्रम में लॉगआउट बटन के माध्यम से चला रहा हूं, इसलिए मुझे पूरा यकीन है कि स्टांजा सही है। मुझे लगता है कि यदि ब्राउज़र विंडो बंद हो रही है तो स्ट्रॉफ़ को स्टेन्ज़ा भेजने में समस्या हो रही है। क्या यहां कोई कामकाज है? मैंने ऑनबेरनलोड लोड ईवेंट की भी कोशिश की है (मुझे पता है कि यह पूरी तरह से क्रॉस-ब्राउज़र संगत नहीं है), लेकिन ऐसा लगता है कि यह भी काम नहीं करता है।

कोई सलाह बहुत सराहना की है!

धन्यवाद, जॉन

उत्तर

10

सुनिश्चित करें कि आप मोड सिंक करने के लिए स्विच, और अपने disconnect() कॉल भेजने से पहले flush() कहते हैं। यहां एक उदाहरण दिया गया है:

var Client = { 
    connect: function(spec) { 
    this.connection = new Strophe.Connection(spec.url); 
    }, 

    disconnect: function() { 
    this.connection.options.sync = true; // Switch to using synchronous requests since this is typically called onUnload. 
    this.connection.flush(); 
    this.connection.disconnect(); 
    } 
} 

फिर आप ऑनबेरनलोड/ऑननलोड से जुड़ सकते हैं। (JQuery उदाहरण)

var client = new Client; 
client.connect(); 
$(window).unload(function() { 
    client.disconnect(); 
}); 
+2

तुम एक समझौता Strophe.js की आवश्यकता होगी: https://github.com/metajack/strophejs/ मुद्दों/16 –

+0

नवीनतम स्ट्रॉफ़ के लिए आपको इसका उपयोग करना चाहिए .connection.options.sync = true; – CristiC

+2

connection.options.sync = सच वास्तव में मेरे हाइब्रिड ऐप को स्थिर करते समय फ्रीज किया गया। गंभीरता से। मैंने एक छोटा क्रोम प्रोफाइलिंग किया था। यह दिखाता है कि जब आप लॉगआउट के बाद रिलागिन करते हैं, तो संपूर्ण ऐप फ्रीज हो जाता है। हालांकि, जब मैंने सिंक = सत्य हटा दिया, तो सबकुछ ठीक था। यह सिंक वास्तव में क्या करता है? मुझे लगता है कि यह एक सिंक पैटर्न सेट करता है जिसके बाद प्रत्येक ऑपरेशन समकालिक होता है। असीमित असीमित, मेरी समस्या हल हो गई। मैं अभी भी इसके चारों ओर अपना सिर नहीं ले पा रहा हूं –

2

कोई पैच की जरूरत है, वहाँ अब एक अंतर्निहित समाधान:

connection.flush(); 
connection._options.sync = true;  
connection.disconnect(); 
संबंधित मुद्दे