Sto cercando di accertare un modo per stabilire un ID univoco per schede di Chrome che soddisfi le seguenti condizioni:persistente ID univoco per schede di Chrome che dura tra le sessioni del browser
- identifica univocamente ogni scheda
- Soggiorni lo stesso per una data scheda tra riavvii del browser (schede ripristinate dalla sessione)
- Restituisce lo stesso se una scheda viene chiusa e quindi riaperta con Annulla scheda chiusa (Ctrl + Shift + T)
- Soggiorni distinti se una scheda è duplicata
Ho fatto una ricerca piuttosto aggressiva per trovare una soluzione completa, ma nulla sembra fare il trucco. Questi sono i metodi che ho provato, in ordine crescente di efficacia:
- tab.id fornito Usa Chrome: non persistono tra le sessioni del browser o Chiudi/Annulla-vicino
- Mettere un GUID nei cookie : non è univoco per ogni scheda, solo per dominio/URL
- Mettere un GUID in localStorage: persiste tra le sessioni del browser e vicino/annullare-vicino, ma non è univoco per ogni scheda, solo per dominio
- Metti un GUID in sessionStorage: univoco per ogni scheda, persiste in tutto Chiudi/Annulla-vicino, unico nel suo genere per le schede duplicate, ma viene spazzato via tra le sessioni del browser
- Usa documento pagina web identificabile attributi come chiave univoca: questo è il approccio migliore che ho trovato finora. Una chiave può essere costruita tramite uno script di contenuto dai seguenti valori:
[location.href, document.referrer, history.length]
.
Per quanto riguarda quest'ultimo approccio, la chiave costruita è unica in tutte le schede che condividono un URL, un referente e una cronologia comuni. Tali valori rimarranno gli stessi per una data scheda tra riavvii del browser/ripristini di sessione e chiudi/chiudi/chiudi. Sebbene questa chiave sia "carina" unica, ci sono casi in cui è ambigua: ad esempio, 3 nuove schede aperte a http://www.google.com hanno tutte la stessa chiave in comune (e questo genere di cose accade abbastanza spesso nella pratica).
Il metodo "metti GUID in sessionStorage" può anche essere usato per disambiguare tra più schede con la stessa chiave costruita per i casi chiusura/chiusura e tabulazione duplicata durante la sessione corrente del browser. Ma questo non risolve il problema di ambiguità tra i riavvii del browser.
Quest'ultima ambiguità può essere parzialmente attenuata durante il ripristino della sessione osservando quali schede Chrome si apre insieme in cui finestre e estrapolando per una determinata chiave ambigua quale scheda appartiene a quale finestra in base alla presenza delle schede "fratello" previste (registrate durante la precedente sessione del browser). Come puoi immaginare, l'implementazione di questa soluzione è abbastanza complicata e piuttosto rischiosa. E può solo disambiguare tra le schede con lo stesso codice che Chrome ripristina in finestre diverse. Ciò lascia linguette identiche che si ripristinano nella stessa finestra inconciliabilmente ambigue.
C'è un modo migliore? Un GUID univoco, generato da browser, garantito per browser, che permane tra i riavvii del browser (ripristini di sessione) e chiusura/chiusura-chiusura sarebbe l'ideale, ma finora non ho trovato nulla di simile.
Grandi idee. Purtroppo windowId cambia tra le sessioni del browser, ma se posso dedurre le modifiche di windowId tra le sessioni ricordando e confrontando quali schede sono presenti in ogni finestra prima e dopo il riavvio del browser, dovrei essere in grado di usare .index come suggerisci di disambiguare due altrimenti schede identiche in una data finestra. Grazie mille. – joelpt
Aggiungerò che dovrei essere in grado di correlare una finestra "prima del riavvio" ricordata con un windowId "after-restart" aperto, se posso identificare qualsiasi * single * tab che abbia un url univoco + referrer + chiave historylength. Poiché detta scheda è l'unica con quella particolare chiave, so a quale finestra appartiene; Pertanto, so che tutte le schede memorizzate con la stessa finestra "vecchia" appartengono anche alla stessa "nuova" finestra. – joelpt
@joelpt yes, windowId non è affidabile ma se si collegano i listener di eventi 'chrome.window.onCreated' e' chrome.window.onRemoved' è possibile emulare facilmente un indice (ID ordine) su tutte le finestre. –