JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

HTML5/JavaScriptのストレージイベントハンドラーの使い方

ストレージイベントハンドラーとは

HTML5のWeb Storage APIには、ストレージの変更を検知するためのstorageイベントが用意されています。ここで重要なのは、storageイベントハンドラーは別のウィンドウ(タブ)からストレージ操作が行われた場合にのみ発火するという仕様です。同じウィンドウ内でsessionStoragelocalStorageの値を変更しても、そのウィンドウ自身のハンドラーは呼び出されません。

この仕組みは、複数のタブ間でデータの同期を取る際に非常に役立ちます。以下のコードで実際の動作を確認できます。

サンプルコード

// イベントハンドラーの登録
window.addEventListener('storage', storageEventHandlerFunc, false);

function storageEventHandlerFunc(evt) {
    alert("Storage event called key: " + evt.key);
    switch(evt.key){
        case 'one':
        case 'two': batteryDCMeter(); break;
        case 'extPowerOn': rechargeBattery(); break;
    }
}
sessionStorage.setItem("someKey", "someValue");

コードの解説

このコードでは、window.addEventListener()を使ってstorageイベントのリスナーを登録しています。イベントが発生すると、コールバック関数内で変更されたキー名をevt.keyプロパティから取得できます。あとはswitch文で分岐させることで、キーの種類に応じた個別の処理を実行可能です。

なお、上記の例のように同じスクリプト内でsessionStorage.setItem()を実行しても、イベントは発火しません。動作を確認するには、同じオリジンのページを別のタブやウィンドウで開き、そちらからストレージの値を変更する必要があります。

storageイベント利用時の注意点

  • イベントを受け取れるのは、同一オリジン(プロトコル・ドメイン・ポートが一致)の他のウィンドウのみです。
  • 値が実際に変更された場合にのみイベントが発生し、同じ値をセットした場合は発火しません。
  • イベントオブジェクトには、keyoldValuenewValueurlなどの有用なプロパティが含まれています。

複数タブ間の状態共有やリアルタイムなUI更新を実現したい場合は、storageイベントを活用することで、効率的かつシンプルに実装できます。

  1. HTML5のlocalStorageとsessionStorageの違いと使い方を徹底解説!サンプルコード付き

    HTML5 Web Storageとは?Cookieとの違いHTML5では、HTTPセッションCookieに似た仕組みとして、クライアント側(ブラウザ)に構造化データを保存するための2つの機能が導入されました。これらは従来のCookieが抱えていた以下のような課題を解決するために設計されています。CookieはすべてのHTTPリクエストに自動的に付加されるため、同じデータが何度も送信され、Webアプリケーションのパフォーマンスが低下してしまう。Cookieに保存できるデータは約4KBまでという制限があり、必要なデータを格納するには容量不足。HTML5で導入された2つのストレージ機構が「sess

  2. HTML DOM の storage イベントとは?基本構文とサンプルコードを解説

    HTML DOM の storage イベントは、ウィンドウのストレージ領域(localStorage や sessionStorage)に変更が加えられたときに発生します。このイベントには重要な特徴があり、同じウィンドウ内での変更では発火せず、別のウィンドウやタブがそのストレージ領域を変更した場合にのみトリガーされるという点です。これにより、複数のタブ間でデータの同期を取る処理などに活用できます。 storage イベントの主なプロパティ イベントオブジェクトからは、以下のような情報を取得できます。 event.key: 変更されたキーの名前 event.oldValue: 変更前の値 e