我使用strophe.js和jQuery编写了一个基于Web的MUC客户端,我正在尝试发送一个 无法进入房间并断开jquery中的用户 卸载窗口的事件。如果用户导航或关闭 浏览器选项卡,它们应该从MUC注销。
我通过注销测试了我在此事件中运行的代码 按钮我在页面上,所以我很确定该节是正确的。 我认为strophe在浏览器发送节时遇到问题 窗口正在关闭。这里有解决方法吗?我也试过了 onbeforeunload事件(我知道它不完全是跨浏览器 兼容),但这似乎也不起作用。
非常感谢任何建议!
谢谢, 约翰
答案 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();