Strophe在页面卸载时发送双重请求

时间:2011-10-13 10:04:34

标签: javascript xmpp strophe

我用jQuery + Strophe编写了一个XMPP客户端。一切运作良好(1对1,存在,MUC等),并包含在jQuery插件中。但是,当页面卸载时,它会发送2个具有相同rid的最终请求。当我开始处理会话附件时,它最近才成为一个问题。

以下是Firebug控制台的示例:

enter image description here

在这里,我刚刚登录并立即刷新了页面。您看到的第一个帖子是登录后的初始状态节。在该请求之后,新的BOSH请求已开始保持与服务器的连接。刷新页面时,此请求将中止。到目前为止,一切都按照我的预期进行。

然而,在中止请求之后,strophe发送另一个具有完全相同RID的请求。最后的请求是从strophe发送的(我想)良好的举止,与问题无关。但是,它的响应表明openfire(XMPP服务器)终止会话以试图保护帐户。

我查看了我的代码,找不到代表我的任何请求。我相当肯定strophe会发送这个请求。但是,它必须来自我做的事情,因为我的初始原型没有那个问题(实际上,我经常不得不手动杀死管理面板上的会话,因为我忘了通过客户端关闭它们)。

在发布有问题的代码之前,是否有任何已知问题需要检查?

1 个答案:

答案 0 :(得分:2)

我回到工作原型但发现它也有同样的错误。经过一些测试后,我发现只有在我立即刷新页面后才会发生。如果在刷新页面之前发出了请求,则不会发生错误。我向开发人员通报了这个问题并做了一个黑客工作,直到它固定在他们一边。

更新

我发现这只只发生在上。 Safari甚至IE都正确地做到了(即不做双重帖子)。所以也许它的Firefox毕竟表现不好!

更新2:

我收到了一封邮件,要求我做出修改。他们在这里。

在第2566行附近的strophe.js中,更改

sendFunc();

if (req.sends == 0) {
   sendFunc();
}