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

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

以下是Firebug控制台的示例:

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

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

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

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

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

更新:

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

更新2:

我收到了一封邮件,要求我做出修改.他们来了.

在第2566行左右的strophe.js中,改变

sendFunc();

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