66 votes

Comment lier localStorage événement de changement de l'utilisation de jQuery pour tous les navigateurs?

Comment puis-je lier une fonction de l'HTML5 localStorage événement de changement à l'aide de jQuery?

$(function () {

  $(window).bind('storage', function (e) {
    alert('storage changed');
  });

  localStorage.setItem('a', 'test');

});

J'ai essayé ci-dessus, mais l'alerte n'est pas à l'affiche.

Mise à jour: Il fonctionne dans Firefox 3.6, mais il ne fonctionne pas sous Chrome 8 ou IE 8, de sorte que la question devrait être plus " Comment lier localStorage événement de changement de l'utilisation de jQuery pour tous les navigateurs?'

90voto

David Glenn Points 12819

Il s'avère que c'est réellement fonctionne correctement et j'ai mal interprété la spécification

Lorsque le setItem(), removeItem () et clear() méthodes sont appelées sur un objet de Stockage de x qui est associé à un espace de stockage local, si les méthodes n'quelque chose, alors, dans chaque objet de Document dont la Fenêtre de l'objet localStorage de l'attribut de l'objet de Stockage est associé à la même zone de stockage, autres que x, un stockage de l'événement doit être tiré

En d'autres termes, un stockage de l'événement est déclenché sur chaque fenêtre/onglet sauf pour celui qui a mis à jour l' localStorage objet et l'origine de l'événement.

Si l'événement n'a pas été congédiée parce que je n'avais qu'une fenêtre/onglet ouvert. Si je place le code ci-dessus dans une page et d'ouvrir la page en deux onglets, je voudrais voir l'événement déclenché dans le deuxième onglet.

Cette réponse sur le problème contient plus de détails.

13voto

Flimm Points 8870

Voici comment le faire en JQuery:

 $(window).bind('storage', function (e) {
     console.log(e.originalEvent.key, e.originalEvent.newValue);
 });

Accéder e.key directement ne fonctionne pas, vous devez utiliser e.originalEvent.key.

Certains navigateurs avec seulement envoyer de stockage des notifications pour les autres onglets, et d'autres ne le seront pas. (Firefox va envoyer des événements de stockage pour son propre onglet, mais avec key de la valeur null, il semble que).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X