この記事で共有する内容は、Storage Event がページ間通信を実装する方法に関するものであり、非常に参考になるものであり、困っている友人に役立つことを願っています。
window.onstorage をトリガーするには、次の 2 つの条件を満たす必要があることは誰もが知っています:
localStorage.setItem または sessionStorage.setItem を通じて特定のストレージを保存 (更新) する
このストレージを保存 (更新) するとき、新しい値は前の値とは異なる必要があります
上記の 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 つの便利な属性があります。
key 初期化または更新されたストレージのキー名
。ストレージが初期化または更新される前の値です
newValue はストレージが初期化または更新された後の値です
これら 3 つの主要な属性を組み合わせることで、ページ間のデータ同期を実現できます
最後に、localStorage の違いについて触れてみましょうsessionStorage を使用
localStorage に保存されたデータには有効期限の設定がなく、sessionStorage に保存されたデータはページセッションの終了時にクリアされます
関連する推奨事項:
Android カスタムリング LoadingView エフェクト
Html5 Award - モバイルでのシームレスなスクロール アニメーションの実装を勝ち取りました
以上がストレージ イベントがページ間の通信を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。