2011-03-04 71 views
6

我寫了一個基於Web的MUC客戶端使用strophe.js和jQuery,我試圖發送一個 不可用的狀態到房間,並斷開jquery 卸載事件中的用戶窗戶。如果用戶瀏覽或關閉瀏覽器選項卡,則應將其註銷到MUC外。斷開頁面卸載Strophe連接

我測試了我在這個事件中運行的代碼,通過我在頁面上註銷的按鈕 ,所以我非常確定該節是正確的。 我認爲如果瀏覽器 窗口關閉,strophe無法發送節。有沒有解決方法?我也試過 oneforeunload事件(我知道它不是完全跨瀏覽器 兼容),但似乎也沒有工作。

任何意見是非常感謝!

感謝, 約翰

回答

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(); 
    } 
} 

然後你可以綁定到onbeforeunload/onunload。 (jQuery的例子)

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

你需要修補的Strophe.js:https://github.com/metajack/strophejs/問題/ 16 – 2011-03-16 03:44:26

+0

對於最新的strophe,你必須使用this.connection.options.sync = true; – CristiC 2014-03-31 06:29:02

+2

connection.options.sync = true實際上,當我重新登錄時,我的混合應用程序凍結。認真。我做了一個小型的鉻分析。它表明,登錄後重新登錄時,整個應用程序將凍結。但是,當我刪除sync = true時,一切都很好。這個同步究竟做了什麼?我假設它設置了一個同步模式,之後每個操作都是同步的。默認是異步的,解決了我的問題。我仍然無法擺脫困境 – 2016-01-13 13:17:09

2

沒有補丁需要,現在有一個內置的解決方案:

connection.flush(); 
connection._options.sync = true;  
connection.disconnect(); 
相關問題