How do I bind a function to the HTML5 localStorage change event using jQuery?
$(function () {
$(window).bind('storage', function (e) {
alert('storage changed');
});
localStorage.setItem('a', 'test');
});
I've tried the above but the alert is not showing.
Update: It works in Firefox 3.6 but it doesn't work in Chrome 8 or IE 8 so the question should be more 'How to bind to localStorage change event using jQuery for all browsers?'
It turns out that this is actually working correctly and I have misinterpreted the specification
When the setItem(), removeItem(), and clear() methods are called on a Storage object x that is associated with a local storage area, if the methods did something, then in every Document object whose Window object's localStorage attribute's Storage object is associated with the same storage area, other than x, a storage event must be fired
In other words, a storage event is fired on every window/tab except for the one that updated the localStorage
object and caused the event.
So the event was not fired because I only had one window/tab open. If I place the above code in a page and open the page in two tabs I would see the event fired in the second tab.
This answer on the problem contains more details.
Here's how to do it in JQuery:
$(window).bind('storage', function (e) {
console.log(e.originalEvent.key, e.originalEvent.newValue);
});
Accessing e.key
directly does not work. You need to use e.originalEvent.key
.
Some browsers will only send storage notifications to other tabs, and some won't. (Firefox will send storage events to its own tab, but with key
set to null, it seems like).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With