在页面卸载时断开Strophe连接

use*_*313 6 jquery xmpp strophe

我使用strophe.js和jQuery编写了一个基于Web的MUC客户端,我正在尝试向该房间发送不可用的状态,并在窗口的jquery unload事件中断开用户连接.如果用户导航或关闭浏览器选项卡,则应将其注销到MUC.

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

任何建议都非常感谢!

谢谢,约翰

W. *_*III 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以绑定到onbeforeunload/onunload.(jQuery示例)

var client = new Client;
client.connect();
$(window).unload(function() {
  client.disconnect();
});
Run Code Online (Sandbox Code Playgroud)

  • 你需要一个修补过的Strophe.js:https://github.com/metajack/strophejs/issues/16 (2认同)
  • connection.options.sync = true实际上使我的混合应用程序在重新登录时冻结.认真.我做了一个小的铬合金分析.它表明,当您在注销后重新登录时,整个应用程序都会冻结.但是,当我删除sync = true时,一切都很好.这个同步到底是做什么的?我假设它设置了一个同步模式,之后每个操作都是同步的.默认是异步的,解决了我的问题.我仍然无法理解它 (2认同)