【问题标题】:Strophe sending double request on page unloadStrophe 在页面卸载时发送双重请求
【发布时间】:2011-12-06 20:07:10
【问题描述】:

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

这是 Firebug 控制台的示例:

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

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

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

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

【问题讨论】:

    标签: javascript xmpp strophe


    【解决方案1】:

    我回到工作原型,但发现它也有同样的错误。经过一番测试,我发现它只有在我立即刷新页面后才会发生。如果在刷新页面之前发出请求,则不会发生错误。我将此事告知了开发人员,并对其进行了修改以使其正常工作,直到他们将其修复为止。

    更新:

    我发现这种情况只有发生在 Firefox 上。 Safari 甚至 IE 都能正确地做到这一点(即不要重复发布)。所以也许是 Firefox 表现不好!

    更新 2:

    我收到了一封邮件,要求我进行修改。他们来了。

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

    sendFunc();
    

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

    【讨论】:

    • 它对我有用,我不建议更改库文件,但我别无选择,它成功了。 @迈克
    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    相关资源
    最近更新 更多