4

jQuery+Strophe を使用して XMPP クライアントを作成しました。すべてうまく機能し (1 対 1、プレゼンス、MUC など)、jQuery プラグインに含まれています。ただし、ページがアンロードされると、同じridで2つの最終リクエストが送信されます。最近、セッション接続の作業を始めたときに問題になりました。

Firebug コンソールの例を次に示します。

ここに画像の説明を入力

ここでは、ログインしてすぐにページを更新しました。最初に表示される投稿は、ログイン後の最初のプレゼンス スタンザです。その要求の後、サーバーへの接続を開いたままにするために、新しい BOSH 要求が開始されました。ページを更新すると、このリクエストは中止されます。これまでのところ、すべてが期待どおりに進んでいます。

ただし、中断された要求の後、strophe はまったく同じ RID を持つ別の要求を送信します。最終的なリクエストは strophe から送信されます (おそらく) 礼儀正しく、問題とは関係ありません。ただし、その応答は、openfire (XMPP サーバー) がアカウントを保護するためにセッションを強制終了したことを示しています。

コードを確認しましたが、自分に代わって行われたリクエストが見つかりません。私は、strophe がこの要求を送信することを確信しています。ただし、最初のプロトタイプにはその問題がなかったので、それは私がしたことから来ているに違いありません (実際、クライアント経由でセッションを閉じるのを忘れたため、管理パネルでセッションを手動で強制終了する必要がよくありました)。

問題のあるコードを投稿する前に確認すべき既知の問題はありますか?

4

1 に答える 1

2

動作中のプロトタイプに戻りましたが、これにもまったく同じバグがあることがわかりました。少しテストした後、ページをすぐに更新した後にのみ発生することがわかりました。ページを更新する前にリクエストが行われた場合、バグは発生しません。私はこれについて開発者に通知し、開発者側で修正されるまで機能するようにハックを作成しました.

アップデート:

これはFirefoxでのみ発生することがわかりました。Safari と IE でさえ、それを正しく行います (つまり、二重投稿を行いません)。結局、動作が悪いのは Firefox なのかもしれません。

更新 2:

私が行った修正を要求するメールを受け取りました。どうぞ。

strophe.js の 2566 行あたりで、

sendFunc();

if (req.sends == 0) {
   sendFunc();
}
于 2011-10-19T14:25:36.843 に答える