Joindre l'événement:

$(window).on("storage", function (e) {
   //callback not getting hit
});

Essayer de déclencher l'événement:

localStorage.setItem("test", "123");

J'ai deux onglets ouverts, tous deux écoutant l'événement de stockage. Je peux voir le localStorage se mettre à jour correctement sur les deux onglets. Cependant, lorsque je modifie localStorage sur un onglet, l'autre ne déclenche jamais l'événement. Des idées?

Essayé sur Chrome / Firefox. Le format de domaine est https://www.xxx.yyy.zzz.

9
MichaelAttard 8 mars 2016 à 13:55

4 réponses

Si vous testez même entre différents onglets / pages et que vous ne voyez toujours pas l'événement ... J'ai trouvé que l'événement ne se déclenche que si la clé existe déjà.

Il semble que cela ressemble plus à un événement onchange.

Définissez une valeur par défaut sur la clé localStorage, si même undefined, puis testez.

J'appellerais cela un bogue Chrome, car Firefox et Safari se déclenchent correctement, mais c'est ce que c'est.

1
daleyjem 1 oct. 2019 à 04:27

Vous pouvez toujours utiliser un utilitaire comme localDataStorage pour déclencher les événements pour vous, dans la même fenêtre / le même onglet, chaque fois qu'une valeur de clé change, comme celles apportées par les méthodes set ou remove. Vous pouvez également l'utiliser pour définir / obtenir de manière transparente l'un des "types" suivants: Array, Boolean, Date, Float, Integer, Null, Object ou String.

[DISCLAIMER] Je suis l'auteur de l'utilitaire [/ DISCLAIMER]

Une fois que vous instanciez l'utilitaire, l'extrait de code suivant vous permettra de surveiller les événements:

function localStorageChangeEvents( e ) {
    console.log(
        "timestamp: "     + e.detail.timestamp + " (" + new Date( e.detail.timestamp ) + ")" + "\n" +
        "key: "           + e.detail.key     + "\n" +
        "old value: "     + e.detail.oldval  + "\n" +
        "new value: "     + e.detail.newval  + "\n"
    );
};
document.addEventListener(
    "localDataStorage"
    , localStorageChangeEvents
    , false
);
0
Mac 8 nov. 2017 à 20:53

StorageEvent est déclenché sur une page différente avec le même domaine.

Depuis MDN

Le StorageEvent est déclenché chaque fois qu'une modification est apportée à l'objet Storage.

Cela ne fonctionnera pas sur la même page qui effectue les modifications - c'est vraiment un moyen pour les autres pages du domaine d'utiliser le stockage pour synchroniser toutes les modifications apportées。

12
Perry2008084 26 mars 2019 à 04:03
window.addEventListener('storage', function (e) {
      console.log("storage event occured here");
},false);

L'écouteur de stockage est appelé dans d'autres onglets, autres que l'onglet source. Ajoutez simplement le débogueur à d'autres onglets.

0
Vivek Nerle 5 mai 2017 à 08:21