12
votes

Comment puis-je obtenir un événement pour tirer chaque fois que LocalStorage est mis à jour dans Safari 5+?

J'ai essayé de suivre Les exemples sur le site de développeur de safari .

La documentation suggère d'ajouter un auditeur d'événement comme: P>

window.onload = function() {
    ...
    document.body.setAttribute("onstorage", "handleOnStorage();");
}

function handleOnStorage() {
    if (window.event && window.event.key.indexOf("index::") == 0){
        $("stats").innerHTML = "";
        displayStats();
    }
}


3 commentaires

J'ai corrigé les liens dans votre question pour vous; Vous devriez pouvoir ajouter plus de liens bientôt, une fois que vous obtenez un peu plus de représentant. Malheureusement, je ne connais pas la réponse à votre question. J'espère que quelqu'un d'autre peut aider!


Une bonne démo avec son code de code est déjà disponible ici qui aide à comprendre le concept et comment cela fonctionne. HTML5DEMOS.COM/STORAGE-EVENT


Vous avez toujours ce lien qui pourrait vous aider également à comprendre la sessionStorage très bien nczonline.net/blog/2009/07/21/introduction-to-SessionStorage


3 Réponses :


20
votes

Après avoir enquêté plus loin (et avec l'aide d'un ami) J'ai découvert que la méthode Storage_Handler s'appelle non pas lorsque la valeur d'une valeur locale change sur la page dans ma fenêtre ou onglet actuels, mais lorsqu'il change dans un autre onglet.

Par exemple, si j'ai les deux onglets ouverts et que vous avez des contrôles dans les pages dans chaque onglet pour modifier les paramètres localStorage, puis lorsque je touche la commande dans le premier onglet, la méthode Storage_Handler est appelée dans l'autre onglet. < / p>



3
votes

Si vous souhaitez effectuer une action après l'enregistrement des objets enregistrés dans localStorage sur la même page, vous pouvez appeler manuellement la fonction après avoir appelé localstorage.settem et appelez la même fonction à partir du stockage EventListener pour gérer plusieurs onglets.


0 commentaires

1
votes

Je me rends compte que cela se demande sur Safari mais, par le réseau de développeurs Mozilla, le StorageEvent n'est tiré que si l'objet de stockage Web est modifié de l'extérieur de la page, par exemple dans un autre onglet.

https://developer.mozilla.org/fr/fr -Us / Docs / Web / API / WEB_STORAGE_API / UTILISATION_THE_WEB_STORAGE_API

Faites défiler jusqu'à "Répondre aux modifications de stockage avec le stockageEvent".

(J'aurais ajouté cela comme un commentaire à la réponse acceptée, mais je n'ai pas le représentant pour cela.)


0 commentaires