我用jQuery + Strophe编写了一个XMPP客户端。一切运作良好(1对1,存在,MUC等),并包含在jQuery插件中。但是,当页面卸载时,它会发送2个具有相同rid的最终请求。当我开始处理会话附件时,它最近才成为一个问题。
以下是Firebug控制台的示例:
在这里,我刚刚登录并立即刷新了页面。您看到的第一个帖子是登录后的初始状态节。在该请求之后,新的BOSH请求已开始保持与服务器的连接。刷新页面时,此请求将中止。到目前为止,一切都按照我的预期进行。
然而,在中止请求之后,strophe发送另一个具有完全相同RID的请求。最后的请求是从strophe发送的(我想)良好的举止,与问题无关。但是,它的响应表明openfire(XMPP服务器)终止会话以试图保护帐户。
我查看了我的代码,找不到代表我的任何请求。我相当肯定strophe会发送这个请求。但是,它必须来自我做的事情,因为我的初始原型没有那个问题(实际上,我经常不得不手动杀死管理面板上的会话,因为我忘了通过客户端关闭它们)。
在发布有问题的代码之前,是否有任何已知问题需要检查?
答案 0 :(得分:2)
我回到工作原型但发现它也有同样的错误。经过一些测试后,我发现只有在我立即刷新页面后才会发生。如果在刷新页面之前发出了请求,则不会发生错误。我向开发人员通报了这个问题并做了一个黑客工作,直到它固定在他们一边。
我发现这只只发生在上。 Safari甚至IE都正确地做到了(即不做双重帖子)。所以也许它的Firefox毕竟表现不好!
我收到了一封邮件,要求我做出修改。他们在这里。
在第2566行附近的strophe.js中,更改
sendFunc();
到
if (req.sends == 0) {
sendFunc();
}