1

同じブラウザー (同じドメイン) の 2 つの異なるタブ間で通信したい。

2 番目のタブで特定のイベントが発生すると、localstorage 変数の値を (Javascript を使用して) 変更します。最初のタブでこの変更を検出したい。変数の名前は「status」で、値は 0 から 1 に変化します

可能な解決策を考えていましたが、最初のタブでタイマーを使用するとうまくいくと思いますが、もっと良い方法があるはずだとも思います.

タイマーを使用せずに「ステータス」変数の値が変化したことを検出する方法があるかどうか知っていますか?

どうもありがとう!

4

2 に答える 2

2

ローカルストレージメカニズムに組み込まれたイベントを使用するという、間違いなくより良い方法があります。tab2でlocalstorageを更新すると、tab1はupdateイベントを取得します。このイベントは、localstorageから新しい値を読み取るためのシグナルとして使用できます。

詳細については、以下を参照してください。

ChromeのlocalStorage実装にバグがありますか?

http://diveintohtml5.info/storage.html

于 2012-10-20T07:53:47.163 に答える
2

Storage イベントは必要なものを提供するはずです。

ストレージ イベントに関する HTML 仕様 ( http://dev.w3.org/html5/webstorage/#the-storage-event ) は次のように述べています。

ストレージ イベントは、前の 2 つのセクション (セッション ストレージ、ローカル ストレージ) で説明したように、ストレージ領域が変更されたときに発生します。

これが発生すると、ユーザー エージェントは、影響を受ける Storage オブジェクトを持つ Document オブジェクトを持つ各 Window オブジェクトで、ストレージという名前のイベントを起動するタスクをキューに入れる必要があります。このイベントはバブルせず、キャンセルできず、StorageEvent インターフェイスを使用します.

最後の節に注意してください。ストレージにアクセスできるすべてのウィンドウに変更が通知される必要があります。

ただし、仕様の前のセクションにある次の節に注意してください。

setItem()、removeItem()、および clear() メソッドが、セッション ストレージ領域に関連付けられている Storage オブジェクト x で呼び出されたときに、メソッドが何かを実行した場合、Window オブジェクトの sessionStorage 属性の Storage オブジェクトがx 以外の同じストレージ領域に関連付けられている場合、以下で説明するように、ストレージ イベントを発生させる必要があります。

そのため、変更を引き起こしたドキュメントは警告されません。

于 2012-10-20T08:13:37.287 に答える