最初は storage-event を使用することを考えましたが、この質問とこの質問、およびhtml5demos.com でのこのデモからわかるように、ストレージ イベントの使用は、ウィンドウ/タブ間のローカル ストレージの変更を追跡することを目的としています。 、ドキュメント自体の内部ではありません。
setItem
ただし、 setItem をオーバーライドすることで、 が呼び出されたときに発生する独自のイベントを作成できます。
//create an "onstoragechange" custom event
var storageEvent = document.createEvent('Event');
storageEvent.initEvent('onstoragechanged', true, true);
document.addEventListener('onstoragechanged', function (e) {
alert('value added to localstorage');
//or
alert(localStorage.getItem('test'));
//call the code here, as you above would do after setTimeout
//"callback.call(self);" or whatever
}, false);
//override localStorage.setItem
var oldSetItem = Storage.prototype.setItem;
Storage.prototype.setItem = function() {
oldSetItem.apply(this, arguments);
document.dispatchEvent(storageEvent);
}
//test
localStorage.setItem('test', 'value');
デモ/jsfiddle : http://jsfiddle.net/cYLHT/
これで、localStorage に何かを保存するたびにディスパッチされるイベントができ、書き込まれた値が実際に存在します。特定の重要なキーが更新/保存された場合の特別なイベントなど、アプリケーションを支援するイベントでこれを拡張します。上記はおそらく「トピック外」の回答、またはやり過ぎのようですが、コードの周りに setTimeouts を広めるよりもはるかに優れたアプローチだと思います。