He estado jugando con localStorage y EventListener como se ve a continuación (de w3schools pero con mi juego). Lo siguiente siempre imprime "Se realizó un cambio en el área de almacenamiento 3" en el div. Supongo que esta es la naturaleza asíncrona de JS y tendría que hacer algo como el encadenamiento de promesas.
En segundo lugar, y de manera similar, cuando agrego la eliminación de la variable de localStorage y, por lo tanto, en EventListener, detecto que la variable es nula, lo siguiente no imprimirá nada en el div. Supongo que está viendo la eliminación antes de que pueda ejecutar el primer evento (configurar la variable) donde realmente se imprime. De todos modos, ¿hay alguna manera de configurar y eliminar una variable de localStorage o esto es todo lo que sincroniza y necesita promesas (anteriormente devoluciones de llamada y setTimeouts)? Muchísimas gracias.
<button onclick="changeValue()">Change a Storage Item</button> <p id="demo"></p> <script> window.addEventListener("storage", myFunction); var x; var c=0; var mtv; function myFunction(event) { if (event.key==="mytime") { mtv=localStorage.getItem("mytime"); if (mtv===null) { } else { document.getElementById("demo").innerHTML = "A change was made in the storage area "+ c; } } } function changeValue() { x = window.open("", "myWindow", "width=200,height=100"); c=c+1 x.localStorage.setItem("mytime", "true"); c=c+1; x.localStorage.removeItem("mytime"); c=c+1; x.close(); } </script> </body> </html>ACTUALIZAR... No sé cómo formatear el código en una respuesta, pero en lugar de hacer la eliminación instantánea anterior del objeto localStorage, opté por agregar/eliminar alternar en la variable localStorage... la adición o eliminación debería activarse el evento ActionListener en la ventana principal....
if(localStorage.getItem('mytime')){ x.localStorage.removeItem("mytime"); }else{ x.localStorage.setItem("mytime", "true"); }Ok, lo más fácil que puedes hacer para ver qué sucede es crear un HTML con tu código y abrirlo en tu navegador. Luego, coloque puntos de interrupción en el evento y en los lugares en los que actualiza el almacenamiento. Vamos a ver:
Si necesita realizar un seguimiento de sus valores de c, puede guardar en el almacenamiento esos valores:
x.localStorage.setItem("mytime", c);Luego, recibe un primer evento con event.newValue="1" y un segundo con event.newValue=null y event.oldValue="1".