6

この質問にはおそらく答えがありません。でも、がんばろうと思いました。私はすばらしい 1 ページのアプリケーションを書きました。アプリケーションが起動すると、開いているタブがサーバーに「登録」され、「アクティブな」タブとして保存されます。

ユーザー A がワークスペースで XYZ を変更すると、そのワークスペースで任意のユーザーが開いたすべてのタブが、XYZ が変更されたという通知を受け取ります。これにより、クライアントでリロードがトリガーされ、魔法のように更新されます。現時点では、ポーリングでこれを行っています。ただし、すべてが機能する場合は、WS や Socket.io などを使用してさらに高速化できます。

問題: すべてのタブが通知を受け取ります。そもそもそれを扇動したタブでさえ!(その結果、更新済みの画面が更新されます)

どういうわけか、リクエストを行っているタブのタブ ID をサーバーに知らせる必要があります。ユーザーが 5 つのタブを開いている可能性があることに注意してください。ユーザーが XYZ を変更すると、実際にトリガーしたタブを除いて、すべてのタブが通知を受け取る必要があります。

現時点では、すべての Ajax リクエストに対してワークスペース ID を渡しています (ユーザーがログインし、同時に複数のワークスペースにアクセスできる場合があります)。

  • 解決策 1:すべてのリクエストにワークスペース IDタブ ID の両方を追加する
  • 解決策 2: すべての要求にタブ ID のみを使用します。アプリは、tabID からワークスペース ID を計算します (どのワークスペースに属しているかを認識します)。
  • 解決策 3: ????? (私が見逃しているものはありますか?)

何か案は?

4

2 に答える 2

2

どのタブに変更通知を送信するかをサーバーに心配させる代わりに、変更を開始したタブに通知を無視させることができます。

これを行うには、次の 2 つの方法が思い浮かびます。

  • コンテンツを変更した後、タブは短時間すべての通知を無視します。(複数のタブでの変更が短時間に発生しない限り、これは問題なく機能します。)
  • タブに、xyz への変更と共にサーバーに送信する「変更 ID」を作成させます。ブロードキャスト変更通知にはこの ID が含まれており、送信タブはそれを送信したものとして認識し、無視します。
于 2013-01-16T15:53:02.103 に答える
0

&イベントへのフォールバックを使用してHTML5 Visibility APIを試し、ページが現在表示されている/アクティブな場合はページの更新を抑制することができます。window.onfocuswindow.onblur

于 2013-01-15T19:09:01.330 に答える