ホームページ  >  記事  >  ウェブフロントエンド  >  ストレージ イベントがページ間の通信を実装する方法

ストレージ イベントがページ間の通信を実装する方法

不言
不言オリジナル
2018-07-24 09:58:202531ブラウズ

この記事で共有する内容は、Storage Event がページ間通信を実装する方法に関するものであり、非常に参考になるものであり、困っている友人に役立つことを願っています。

window.onstorage をトリガーするには、次の 2 つの条件を満たす必要があることは誰もが知っています:

  1. localStorage.setItem または sessionStorage.setItem を通じて特定のストレージを保存 (更新) する

  2. このストレージを保存 (更新) するとき、新しい値は前の値とは異なる必要があります

上記の 2 番目の条件は、簡単に言うと、ストレージが存在しないため、ストレージの初期化であるか、その値が null であるか、または既存のストレージ

例:

// 初始化storage
window.localStorage.setItem('a', 123);

// 注册onstorage事件
window.onstorage = (e) => {
  console.log(e);
};

// 更新storage
window.localStorage.setItem('a', 123);

上記のコードの最後の行は、a の値が変更されておらず、前後で 123 であるため、onstorage イベントをトリガーしません。そのため、ブラウザーはこの更新が無効であると判断します

onstorage イベントはブラウザによってトリガーされるため、同じドメイン名 で複数の ページを開き、それらのいずれかで window.localStorage.setItem メソッドを実行すると (冒頭で述べた 2 番目の条件も確認する必要があります) onstorage イベントがリッスンされている場合、これらのページの onstorage イベント コールバックが実行されます

例:

// http://www.example.com/a.html
<script>
// 注册onstorage事件
window.onstorage = (e) => {
  console.log(e);
};
</script>
// http://www.example.com/b.html
<script>
// 注册onstorage事件
window.onstorage = (e) => {
  console.log(e);
};
</script>
// http://www.example.com/c.html
<script>
// 触发onstorage事件
window.localStorage.setItem('a', new Date().getTime());
</script>

ページ a とページ b の後にページ c が開かれている限り (たとえ3 つのページは同じブラウザ ウィンドウ内にありません。ここでウィンドウを区別する必要があります) (タブ ページとの違い)、ページ a と b の onstorage イベントがトリガーされます

これで、ストレージ イベントを使用して次のことを行う方法がわかりました。ページ間の通信を実現しますが、この通信は何に役立ちますか?
実際に必要なのは、どのストレージ更新操作が onstorage イベントをトリガーしたかを知ることだけです。 onstorage イベント コールバックは、他のイベント コールバック関数と同様に、イベント オブジェクト パラメーターも受け取ります。このオブジェクトには次の 3 つの便利な属性があります。

  1. key 初期化または更新されたストレージのキー名

  2. 。ストレージが初期化または更新される前の値です

  3. newValue はストレージが初期化または更新された後の値です

これら 3 つの主要な属性を組み合わせることで、ページ間のデータ同期を実現できます

最後に、localStorage の違いについて触れてみましょうsessionStorage を使用

localStorage に保存されたデータには有効期限の設定がなく、sessionStorage に保存されたデータはページセッションの終了時にクリアされます

関連する推奨事項:

Android カスタムリング LoadingView エフェクト

Html5 Award - モバイルでのシームレスなスクロール アニメーションの実装を勝ち取りました

以上がストレージ イベントがページ間の通信を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。