Localstorage には、他のページを同期するためにサブスクライブできるイベントがあります。
注: ウィンドウ A でキーの値を更新すると、イベントはウィンドウ A ではトリガーされません。ウィンドウ B と C でトリガーされます。
ここにデモがあります:
http://html5demos.com/storage-events
このページを複数のタブで開きます。入力の値を変更し、それが div に反映されていることを確認します。
Javascript のコードは次のとおりです。
var dataInput = document.getElementById('data'),
output = document.getElementById('fromEvent');
// handle updates to the storage-event-test key in other windows
addEvent(window, 'storage', function (event) {
if (event.key == 'storage-event-test') {
output.innerHTML = event.newValue;
}
});
// Update the storage-event-test key when the value on the input is changed
addEvent(dataInput, 'keyup', function () {
localStorage.setItem('storage-event-test', this.value);
});
マークアップ:
<div>
<p>Your test data: <input type="text" name="data" value="" placeholder="change me" id="data" /> <small>(this is only echoed on <em>other</em> windows)</small></p>
<p id="fromEvent">Waiting for data via <code>storage</code> event...</p>
</div>
HTML 5 仕様では、イベントで渡されるすべての情報について説明しています。
[Constructor(DOMString type, optional StorageEventInit eventInitDict)]
interface StorageEvent : Event {
readonly attribute DOMString key;
readonly attribute DOMString? oldValue;
readonly attribute DOMString? newValue;
readonly attribute DOMString url;
readonly attribute Storage? storageArea;
};
dictionary StorageEventInit : EventInit {
DOMString key;
DOMString? oldValue;
DOMString? newValue;
DOMString url;
Storage? storageArea;
};
出典: http://www.w3.org/TR/webstorage/#the-storage-event
このイベントを使用すると、ローカル ストレージ内の特定のキーが更新されたときに、他のページが反応するようにすることができます。