在页面卸载时断开Strophe连接

时间:2011-03-04 19:37:18

标签: jquery xmpp strophe

我使用strophe.js和jQuery编写了一个基于Web的MUC客户端,我正在尝试发送一个 无法进入房间并断开jquery中的用户 卸载窗口的事件。如果用户导航或关闭 浏览器选项卡,它们应该从MUC注销。

我通过注销测试了我在此事件中运行的代码 按钮我在页面上,所以我很确定该节是正确的。 我认为strophe在浏览器发送节时遇到问题 窗口正在关闭。这里有解决方法吗?我也试过了 onbeforeunload事件(我知道它不完全是跨浏览器 兼容),但这似乎也不起作用。

非常感谢任何建议!

谢谢, 约翰

2 个答案:

答案 0 :(得分:10)

确保切换到同步模式,然后在发送flush()来电之前致电disconnect()。这是一个例子:

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

答案 1 :(得分:2)

不需要补丁,现在有一个内置的解决方案:

connection.flush();
connection._options.sync = true;    
connection.disconnect();