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
-
Puedes usar
localStorage
y recuerda la fecha en que se creó por primera vez ensession cookie
. CuandolocalStorage
“sesión” es más antigua que el valor de la cookie, entonces puede borrar lalocalStorage
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.
-
Puede almacenar sus datos en
localStorage
durante un par de segundos y agregue un detector de eventos para unstorage
evento. De esta forma sabrá cuando alguna de las pestañas escribió algo en ellocalStorage
y puede copiar su contenido a lasessionStorage
, luego borre ellocalStorage