2012-08-10 50 views
20

Necesito poder identificar en qué pestaña estoy dentro del navegador. ¿No hay algo de información que pueda obtener del navegador para identificar la pestaña? No necesito saber nada sobre otras pestañas, solo necesito una identificación para la pestaña en la que me encuentro. Podría ser un número aleatorio o secuenciado, o un sello de fecha y hora, siempre que siga siendo el mismo para el vida de la pestaña.¿Alguna forma de identificar la pestaña del navegador en JavaScript?

Tengo una aplicación del lado del cliente que realiza una conexión BOSH sobre HTTP a un servidor remoto, y si la abro en varias pestañas, cada instancia necesita su propia identificación única o la aplicación falla, así que solo necesito un número único que está asociado con la pestaña durante el tiempo que esa pestaña exista (es decir, algo que sobreviva a la actualización de la página mientras navego por el sitio que proporciona esta aplicación). Parece una obviedad que debería estar disponible en el navegador, como window.tabId, eso es todo lo que necesito. Tengo un bloque de desarrollo serio porque no puedo superar esta solución simple, simple y simple que parece no existir. Debe haber una manera (una solución de navegador cruzado en eso).

¿Alguna idea?

Respuesta

9

Tienes que estar usando html5, pero sessionStorage combinado con un guid aleatorio parece ser lo que quieres.

+1

Los números pueden ocurrir dos veces, incluso si son elegidos al azar, ¿no? Entonces, existe la posibilidad de que dos pestañas tengan el mismo número. Hubiera pensado que un número de serie en localStorage funcionaría mejor: cuando abra la página en una nueva pestaña, incremente el número y almacénelo en sessionStorage. –

+0

@MaxWaterman: diferentes navegadores, pestañas privadas, cambio de horario ... la serie no está más garantizada que la aleatoria. Hay varias formas de crear un guid lo mejor posible: posibilidad de colisión tan pequeña que no valga la pena molestarla. – jmoreno

1

Una de las posibles soluciones es usar la propiedad "window.name", pero no quiero usarla porque alguien más puede usarla.

Encontré una solución más posible: el uso de sessionStorage. Es compatible con FF3.5 +, Chrome4 +, Safari4 +, Opera10.5 + e IE8 +.

16

sessionStorage es por pestaña/ventana, por lo que puede definir un número aleatorio en sessionStorage y conseguir que en un primer momento si existe:

var tabID = sessionStorage.tabID ? sessionStorage.tabID : sessionStorage.tabID = Math.random(); 

ACTUALIZACIÓN:
En algunos casos, puede tener el mismo sessionStorage en una pestaña múltiple (por ejemplo, cuando duplicas la pestaña). En ese caso, mayo siguiente código ayuda:

var tabID = sessionStorage.tabID && sessionStorage.closedLastTab !== '2' ? sessionStorage.tabID : sessionStorage.tabID = Math.random(); 
sessionStorage.closedLastTab = '2'; 
$(window).on('unload beforeunload', function() { 
     sessionStorage.closedLastTab = '1'; 
}); 
+0

Este código ayuda mucho, pero el almacenamiento de datos persiste cuando duplica la ventana –

+0

El almacenamiento de la sesión no persiste en IE. –

+2

Elegir números al azar no garantiza que sean únicos (es decir, elija un número aleatorio entre 0 y 99, y siempre es posible 11 varias veces). ¿Por qué no un número de serie en localStorage? –

0

Si no hay ningún probabilidades de una abertura de usuario 3 pestañas dentro de 2 milisegundos, podría utilizar una marca de tiempo y tienda que en window.name y usar eso como la tecla en tu búsqueda. El valor de window.name permanecerá en la pestaña hasta que se cierre.

Timestamp

Cuestiones relacionadas