Saltar al contenido

sessionStorage del navegador. compartir entre pestañas?

Solución:

Puede usar localStorage y su eventListener de “almacenamiento” para transferir datos de sessionStorage de una pestaña a otra.

Este código debería existir en TODAS las pestañas. Debería ejecutarse antes que sus otros scripts.

// transfers sessionStorage from one tab to another
var sessionStorage_transfer = function(event) {
  if(!event) { event = window.event; } // ie suq
  if(!event.newValue) return;          // do nothing if no value to work with
  if (event.key == 'getSessionStorage') {
    // another tab asked for the sessionStorage -> send it
    localStorage.setItem('sessionStorage', JSON.stringify(sessionStorage));
    // the other tab should now have it, so we're done with it.
    localStorage.removeItem('sessionStorage'); // <- could do short timeout as well.
  } else if (event.key == 'sessionStorage' && !sessionStorage.length) {
    // another tab sent data <- get it
    var data = JSON.parse(event.newValue);
    for (var key in data) {
      sessionStorage.setItem(key, data[key]);
    }
  }
};

// listen for changes to localStorage
if(window.addEventListener) {
  window.addEventListener("storage", sessionStorage_transfer, false);
} else {
  window.attachEvent("onstorage", sessionStorage_transfer);
};


// Ask other tabs for session storage (this is ONLY to trigger event)
if (!sessionStorage.length) {
  localStorage.setItem('getSessionStorage', 'foobar');
  localStorage.removeItem('getSessionStorage', 'foobar');
};

Probé esto en chrome, ff, safari, ie 11, ie 10, ie9

Este método “debería funcionar en IE8” pero no pude probarlo porque mi IE fallaba cada vez que abría una pestaña … cualquier pestaña … en cualquier sitio web. (bueno, IE) PD: obviamente, necesitará incluir una corrección JSON si también desea compatibilidad con IE8. 🙂

El crédito va para este artículo completo: http://blog.guya.net/2015/06/12/sharing-sessionstorage-between-tabs-for-secure-multi-tab-authentication/

Utilizando sessionStorage porque esto no es posible.

De MDN Docs

Al abrir una página en una nueva pestaña o ventana, se iniciará una nueva sesión.

Eso significa que no puede compartir entre pestañas, para esto debe usar localStorage

  1. Puedes usar localStorage y recuerda la fecha en que se creó por primera vez en session cookie. Cuando localStorage “sesión” es más antigua que el valor de la cookie, entonces puede borrar la localStorage

    Las desventajas de esto es que alguien aún puede leer los datos después de cerrar el navegador, por lo que no es una buena solución si sus datos son privados y confidenciales.

  2. Puede almacenar sus datos en localStorage durante un par de segundos y agregue un detector de eventos para un storage evento. De esta forma sabrá cuando alguna de las pestañas escribió algo en el localStorage y puede copiar su contenido a la sessionStorage, luego borre el localStorage

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *