ローカル ストレージ (Local Storage) の変更イベントを利用する - JavaScript

JavaScriptでローカル ストレージ (Local Storage) の変更イベントを利用するコードを紹介します。

概要

JavaScriptのローカル ストレージでは、ローカルストレージの変更イベントを利用できます。

プログラム

コード

下記のHTMLファイルを作成します。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
  <script type="text/javascript">
    var key = 'MY_VALUE';

    function StorageChange(event) {
      var elem = document.getElementById('output');
      elem.innerText = window.localStorage.getItem(key);    
    }

    function SaveKeyValue() {
      if (window.localStorage != null) {
        value = document.forms.form1.Text_value.value;
        window.localStorage.setItem(key,value);
      }
    }

    function keyUp() {
      SaveKeyValue();
    }

    function load() {
      window.addEventListener('storage', StorageChange);
      var elem = document.getElementById('Text_value');
      elem.addEventListener('keyup', keyUp);
    }
  </script>
</head>
<body onload="load();">
  <form id="form1">
    Value <input id="Text_value" type="text" /><br />
  </form>

  <hr/>
  出力:<span id="output"></span>
</body>
</html>

解説

ページが読み込まれるとloadイベントが呼び出され、下記のコードが実行されます。
function load() {
  window.addEventListener('storage', StorageChange);
  var elem = document.getElementById('Text_value');
  elem.addEventListener('keyup', keyUp);
}

下記のコードにより、ローカルストレージのイベントリスナを登録します。ローカルストレージに変更があった場合に、StorageChange関数が呼び出される動作になります。windowオブジェクトのaddEventListenerメソッドを呼び出し、"storege"イベントに追加します。
window.addEventListener('storage', StorageChange);

テキストボックスの要素をgetElementByIdで取得し、addEventListenerメソッドを呼び出し、"keyup"イベントに追加します。今回KeyDownイベントではなく、KeyUpイベントを利用する理由についてはこちらの記事を参照してください。
var elem = document.getElementById('Text_value');
elem.addEventListener('keyup', keyUp);

テキストボックスにキーの入力があると、KeyUp関数が呼び出されます。KeyUp関数はSaveKeyValue関数を呼び出します。 SaveKeyValue関数では、テキストボックスに入力されている値を取得し、ローカルストレージに書き込みます。今回のプログラムではローカルストレージのキーは'MY_VALUE'(key 変数の値)としています。
ローカルストレージへの値の書き込みの詳細はこちらの記事を参照してください。
function keyUp() {
  SaveKeyValue();
}

function SaveKeyValue() {
  if (window.localStorage != null) {
    value = document.forms.form1.Text_value.value;
    window.localStorage.setItem(key,value);
  }
}

localStorage.setItem メソッドでローカルストレージの内容が変更されると、loadイベントで登録されたイベントリスナである、StoregeChange関数が呼び出されます。StoregeChange関数では、getElementById 関数を呼び出し出力エリアのspan タグの要素を取得し、innerTextプロパティにローカルストレージに保存されている値を出力します。
function StorageChange(event) {
  var elem = document.getElementById('output');
  elem.innerText = window.localStorage.getItem(key);    
}

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。


テキストボックスに文字を入力します。文字を入力するとすぐに[出力]エリアに入力した文字が表示されます。


文字を入力するとすぐに出力のエリアに文字が反映されます。



文字の入力により、ローカルストレージが更新されると、storage イベントのリスナに設定されたStoregeChange 関数が呼び出され、画面が更新される動作が確認できました。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2017-04-18
iPentec all rights reserverd.