2

我正在尝试使用 javascript 与我的 ejabberd 服务器创建与 XMPP 的 strophe 连接,我能够在页面加载时建立连接,并且能够在单击断开按钮时断开连接。

现在的问题是,连接是活动的,如果用户不小心刷新了页面,那么我的 javascript 正在尝试再次连接,并且我得到了响应。(这只是因为之前的连接可能仍然存在)

<body xmlns='http://jabber.org/protocol/httpbind'>
    <failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
            <not-authorized/>
    </failure>
</body>

过了一会儿,如果我再次刷新页面,那么连接将成功建立,所以如果页面被意外刷新,我该如何重置连接,以便用户获得无缝连接。

4

2 回答 2

3

如果您想让连接在页面刷新后仍然存在,请将jidsid变量rid以及您需要的任何其他状态保留在 sessionStorage 之类的东西中。然后,您可以使用attach()来恢复 XMPP 会话。

于 2012-03-10T05:57:03.763 回答
0

您使用相同的 JID 登录,这是不允许的。您需要为您的 JID 设置一个随机资源以确保没有冲突。因此,user@domain您应该使用 JID而不是使用 JID 记录用户user@domain/some_random_resource

此外,原则上您也可以在onbeforeunload那里收听和断开连接。这不适用于基于 webkit 的浏览器,但适用于其他浏览器。

于 2012-03-09T18:31:31.673 回答