Я пытаюсь найти способ установить уникальный идентификатор для вкладок Chrome, отвечающий следующим условиям:
Я провел довольно агрессивное исследование, чтобы найти комплексное решение, но, похоже, ничего не помогает. Вот методы, которые я пробовал, в порядке возрастания эффективности:
[location.href, document.referrer, history.length]
.Что касается этого последнего подхода, сконструированный ключ уникален для всех вкладок, которые имеют общий URL-адрес, реферер и длину истории. Эти значения останутся неизменными для данной вкладки между перезапусками браузера/восстановлением сеанса и закрытием/отменой закрытия. Хотя этот ключ «довольно» уникален, бывают случаи, когда он неоднозначен: например, 3 новые вкладки, открытые на http://www.google.com, будут иметь один и тот же общий ключ (и на практике такое случается довольно часто).
Метод «поместить GUID в sessionStorage» может дополнительно использоваться для устранения неоднозначности между несколькими вкладками с одним и тем же сконструированным ключом для случаев закрытия/отмены закрытия и дублирования вкладок во время текущего сеанса браузера. Но это не решает проблему неоднозначности между перезапусками браузера.
Эта последняя неоднозначность может быть частично устранена во время восстановления сеанса путем наблюдения за тем, какие вкладки Chrome открывает вместе в каких окнах, и экстраполяции для данного неоднозначного ключа, какая вкладка принадлежит какому окну, на основе наличия ожидаемых «родственных» вкладок (записанных во время предыдущий сеанс браузера). Как вы можете себе представить, реализация этого решения довольно сложная и довольно хитрая. И он может устранять неоднозначность только между вкладками с одинаковыми ключами, которые Chrome восстанавливает в разных окнах. Это оставляет вкладки с одним и тем же ключом, которые восстанавливаются в одно и то же окно, как непримиримо двусмысленные.
Есть ли лучший способ? Гарантированный уникальный, сгенерированный браузером, GUID для каждой вкладки, который сохраняется между перезапусками браузера (восстановлением сеанса) и закрытием/отменой закрытия, был бы идеальным, но пока я не нашел ничего подобного.