2012-08-10 14 views
20

Devo essere in grado di identificare la scheda in cui mi trovo all'interno del browser. Non ci sono alcune informazioni che posso ottenere dal browser per identificare la scheda? Non ho bisogno di sapere nulla su altre schede, ho solo bisogno di un id per la scheda in cui mi trovo. Potrebbe essere un numero casuale o sequenziato, o un timbro data-ora, purché rimanga lo stesso per il vita della scheda.Un modo per identificare la scheda del browser in JavaScript?

Ho un'app lato client che effettua una connessione BOSH su HTTP a un server remoto e, se lo apro in più schede, ogni istanza necessita del proprio ID univoco o l'app non riesce, quindi ho solo bisogno di un numero univoco che è associato alla scheda fino a quando tale scheda esiste (cioè qualcosa che sopravvive alla pagina di aggiornamento mentre navigo nel sito che fornisce questa app). Sembra un gioco da ragazzi che dovrebbe essere disponibile nel browser, come window.tabId: è tutto ciò di cui ho bisogno. Ho un serio blocco di sviluppo perché non riesco a superare questa soluzione semplice, semplice e semplice che sembra non esistere. Ci deve essere un modo (una soluzione cross-browser a questo).

Qualche idea?

risposta

9

Devi usare html5, ma sessionStorage combinato con un guid casuale sembra essere quello che vuoi.

+1

numeri possono verificarsi due volte, anche se sono selezionati a caso, no? Quindi c'è la possibilità che due schede possano avere lo stesso numero. Avrei pensato che un numero seriale in localStorage avrebbe funzionato meglio: quando aprite la pagina in una nuova scheda, incrementate il numero e memorizzatelo in sessionStorage. –

+0

@MaxWaterman: diversi browser, schede private, cambio di orario ... seriale non è più garantito che casuale. Ci sono vari modi per creare un guid che sarà buono come si ottiene - possibilità di collisione così piccola da non meritare la pena di disturbare aboit. – jmoreno

1

Una delle possibili soluzioni utilizza la proprietà "window.name", ma non voglio usarla perché qualcun altro può usarla.

Ho trovato un'altra possibile soluzione: using sessionStorage. È supportato da FF3.5 +, Chrome4 +, Safari4 +, Opera10.5 + e IE8 +.

16

SessionStorage è per scheda/finestra, in modo da poter definire un numero a caso in sessionStorage e farlo in un primo momento, se esiste:

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

UPDATE:
In alcuni casi, si può avere lo stesso sessionStorage in più schede (ad es. quando si duplica la scheda). In tal caso, codice seguente potrebbe aiuta:

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

Questo codice è molto utile, ma la memorizzazione dei dati persiste quando si duplica la finestra –

+0

La memoria di sessione non viene mantenuta in IE. –

+2

Selezionare i numeri casualmente non garantisce che siano univoci (es. Selezionare un numero casuale compreso tra 0 e 99, ed è possibile sempre 11 volte più volte). Perché non un numero seriale in localStorage? –

0

Se non v'è alcuna probabilità di un'apertura utente 3 schede entro 2 millisecondi, potrebbe utilizzare un timestamp e negozio che in window.name e utilizzarla come chiave nella tua ricerca Il valore window.name rimarrà con la scheda fino alla sua chiusura.

Timestamp

Problemi correlati