我正在使用Strophe
连接网页上的XMPP用户,并在用户连接后(成功进行身份验证后)移动到新页面之前发送状态
这是我的代码:
if (status===Strophe.Status.CONNECTED){
my_namespace.connection.send($pres());
console.log('CONNECTION STATUS: CONNECTED');
$(document).trigger('connected');
现在问题是一切都发生得太快了,一旦我被重定向到新页面并检查我在服务器控制台(Openfire)的存在,我看到自己离线了!为什么不将此状态发送到服务器?
我搜索找到一个解决方案,即将连接附加到新页面,我对javascript很新,我无法理解为什么我的同一连接也不会占用新页面?
成功连接后,我使用此代码重定向我的页面。
$(document).on('connected', function() {
my_namespace.set_cookies();
console.log('Cookies set after sending presence in connected function');
console.log('Trying to redirect now');
window.location = 'question_section.html';
console.log('Redirected');
});
附加代码(将以前的连接添加到新页面)位于传入的html的头部:
<script type="text/javascript">
$(function(){
$(document).trigger('attach', cookie_data);
console.log('Attach called from the head of new HTML');
});
</script>
PS:我成功了。我的jid,资源ID&amp;会话ID也已保存在cookie中。
任何帮助都将不胜感激。
答案 0 :(得分:0)
在您的已连接处理程序中,发送您的状态。
conn.send($pres({type: 'available'}).c('priority').t(1).up().tree());
创建一个侦听存在的处理程序
conn.addHandler(onPresence, null, 'presence');
一旦你回来,然后重定向到下一页。
var onPresence = function(presence){
//do redirect
}
您应该启用日志记录并评估状态,可能不是您获得的(取决于您设置聊天的方式)。另外,请记住在更改页面时增加RID。