Tengo algunos valores en mi sitio que quiero borrar cuando el navegador está cerrado. Elegí sessionStorage
almacenar esos valores. Cuando se cierra la pestaña, se borran y se mantienen si el usuario presiona f5; Pero si el usuario abre algún enlace en una pestaña diferente, estos valores no estarán disponibles.
¿Cómo puedo compartir sessionStorage
valores entre todas las pestañas del navegador con mi aplicación?
El caso de uso: coloque un valor en algún almacenamiento, mantenga ese valor accesible en todas las pestañas del navegador y desactívelo si todas las pestañas están cerradas.
if (!sessionStorage.getItem(key)) {
sessionStorage.setItem(key, defaultValue)
}
javascript
cross-browser
session-storage
Vladimir Gordienko
fuente
fuente
Respuestas:
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.
Probé esto en cromo, ff, safari, es decir, 11, es decir, 10, es decir, 9
Este método "debería funcionar en IE8" pero no pude probarlo ya que mi IE fallaba cada vez que abría una pestaña ... cualquier pestaña ... en cualquier sitio web. (bueno, IE) PD: obviamente necesitarás incluir una cuña JSON si también quieres soporte para IE8. :)
El crédito va a este artículo completo: http://blog.guya.net/2015/06/12/sharing-sessionstorage-between-tabs-for-secure-multi-tab-authentication/
fuente
BroadcastChannel
ahora es una buena herramienta para hacer esto. developers.google.com/web/updates/2016/09/broadcastchannelUsar
sessionStorage
para esto no es posible.De los documentos de MDN
Eso significa que no puede compartir entre pestañas, para esto debe usar
localStorage
fuente
path='/'
obligarla a eliminarse cuando se cierre la ventana del navegador. Pero para pestañas, no tengo idea en este momento.localStorage
datos ocurre porque alguien navega a un dominio diferente, en la misma pestaña? Me parece que esto eliminará incorrectamente loslocalStorage
datos: la pestaña no se cerró, y si la persona navega hacia atrás, querría los datos nuevamente, correcto. De todos modos, es un enfoque interesante, no pensé en eso: -)Puede usar
localStorage
y recordar la fecha en que se creó por primera vezsession cookie
. CuandolocalStorage
"sesión" es anterior al valor de la cookie, puede borrar ellocalStorage
Contras 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
localStorage
durante un par de segundos y agregar un detector de eventos para unstorage
evento. De esta manera, sabrá cuándo alguna de las pestañas escribió algo en ellocalStorage
y puede copiar su contenido en elsessionStorage
, luego simplemente borre ellocalStorage
fuente
En realidad, mirando otras áreas, si abre con _blank, mantiene la sesión Almacenamiento mientras abra la pestaña cuando el padre está abierto:
En este enlace, hay un buen jsfiddle para probarlo. sessionStorage en una nueva ventana no está vacía, cuando se sigue un enlace con target = "_ blank"
fuente
Mi solución para no tener sessionStorage transferible a través de pestañas fue crear un perfil local y aprovechar esta variable. Si esta variable está configurada pero mis variables sessionStorage no están adelante, reinícielas. Cuando el usuario cierra sesión, la ventana se cierra y destruye esta variable localStorage
fuente
Aquí hay una solución para evitar el corte de sesión entre pestañas del navegador para una aplicación Java. Esto funcionará para IE (JSP / Servlet)
1) primera página JS
2) JS común para todas las páginas
3) web.xml - mapeo de servlet
4) código de servlet
fuente