我用 jQuery+Strope 编写了一个 XMPP 客户端。一切都运行良好(一对一、存在、MUC 等),并且包含在 jQuery 插件中。但是,当页面卸载时,它会发送 2 个具有相同 Rid 的最终请求。最近当我开始处理会话附件时,这才成为一个问题。
以下是 Firebug 控制台的示例:
在这里,我刚刚登录并立即刷新页面。您看到的第一个帖子是登录后的初始存在节。在该请求之后,新的 BOSH 请求将开始保持与服务器的连接打开。当我刷新页面时,该请求被中止。到目前为止,一切都按我的预期进行。
然而,在中止请求之后,strope 会使用完全相同的 RID 发送另一个请求。最后的请求是从 strope 发出的(我想)是出于礼貌,与问题无关。然而,它的响应表明 openfire(XMPP 服务器)终止了会话以试图保护帐户。
我查看了我的代码,找不到代表我提出的任何请求。我相当确定 strope 发送了这个请求。然而,它一定来自我所做的事情,因为我最初的原型没有这个问题(事实上,我经常不得不手动终止管理面板上的会话,因为我忘记通过客户端关闭它们)。
在发布违规代码之前是否应该检查任何已知问题?
我回到工作原型,但发现它也有同样的错误。经过一番测试,我发现只有在我立即刷新页面后才会出现这种情况。如果在刷新页面之前发出请求,则不会发生该错误。我向开发人员通报了这一情况,并进行了修改以使其正常工作,直到他们修复为止。
UPDATE:
我发现这个onlyFirefox 会发生这种情况。 Safari 甚至 IE 都能正确执行此操作(即不要重复发布)。所以也许最终是 Firefox 表现不佳!
更新2:
我收到一封邮件,要求我进行修改。他们来了。
在 strope.js 的第 2566 行左右,更改
sendFunc();
to
if (req.sends == 0) {
sendFunc();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)