アップデート
このridプラス+1などについて理解しようとした後、ridがプレゼンス、名簿の変更時に名簿に送信されたメッセージで変化していることに気付いたので、セッションで新しいridを記憶するためにそれぞれにXMLHttpRequestを作成しました。何らかの理由で、ローカルストレージが機能する場合と機能しない場合があります。
今、私はいつも最新の状態にしています。
私はこれを得たと思います。問題は除去と存在にありました。
1) まず、ログから、rid が増加しているか減少しているかを把握する必要があります。
私のは1つ減っていました。だから私は Chat.connection.rid から -1 を引きます
2) openfire ログで、ページの更新時に利用不可のステータスを送信していることがわかったので、window.unload 関数を変更してプレゼンスをオンラインに送信しました。N
今、私は何百万回もページを更新していますが、切断されることはありません。
ここで、非 HTML ブラウザの localStorage への connection.rid を記憶する方法を理解する必要があります。
デバッグ モードで Openfire を開始するには、./openfire.sh -debug を追加するだけです。次に、debug.log ですべてを確認できるようになります。
これは私にとってはトリックでした。これがあなたのためにトリックをしている場合は、+1して回答を受け入れてください。
ログアウト時にセッションを終了することを忘れないでください:)
アップデート
これは私のwindow.onunload関数です
window.onunload = function(ev){
var initialPresence = $pres().c('show').t("cao").up().c('status').t("sad");
Chat.connection.send(initialPresence);
store.set('session_rid', parseInt(Chat.connection.rid)-1);
//save rooster contacts state
var contacts = document.getElementById('records').getElementsByTagName('li');
var id_value;
var class_value;
var status;
var el;
for(i= 0; i < contacts.length; i++){
el = contacts[i].getElementsByClassName("mood")[0];
status = el.textContent || el.innerText;
Array.prototype.slice.call(contacts[i].attributes).forEach(function(item) {
if(item.name == "id"){
id_value = item.value;
}
if(item.name == "class"){
class_value = item.value;
}
store.set('user'+i, { id: id_value, class_name: class_value, status : status });
});
}
Chat.disconnect();
}
これは私のwindow.onload関数です
window.onload = function(){
if(store.get("session_rid")){
var obj;
var id;
var class_name;
var status;
store.forEach(function(val, key) {
if(val !== "session_rid"){
setTimeout(function(){
obj = eval(key);
id = obj.id;
class_name = obj.class_name;
status = obj.status;
if(document.getElementById(id)){
document.getElementById(id).className = class_name;
document.getElementById(id).getElementsByClassName("mood")[0].innerHTML = "<span>"+status+"</span>";
}
}, 1000);
}
})
}
}
これは私のために働いています。store.jsを使用してデータを保存し、IE で動作できるようにしました。
付属のセッションを使用しました。
//json is from ajax call on some php script that has started attached session on user login
var obj = JSON.parse(json);
connection = new Strophe.Connection(BOSH_SERVICE);
connection.attach(obj.fulljid,
obj.sid,
(store.get("session_rid") ? store.get("session_rid"):obj.rid),
justDoIt);
full_jid = obj.fulljid;