Постоянный уникальный идентификатор для вкладок Chrome, который сохраняется между сеансами браузера.

Я пытаюсь найти способ установить уникальный идентификатор для вкладок Chrome, отвечающий следующим условиям:

  • Уникально идентифицирует каждую вкладку
  • Остается то же самое для данной вкладки между перезапусками браузера (вкладки с восстановленным сеансом)
  • Остается неизменным, если вкладка закрыта, а затем снова открыта с помощью команды «Отменить закрытую вкладку» (Ctrl+Shift+T)
  • Остается отличной, если вкладка дублируется

Я провел довольно агрессивное исследование, чтобы найти комплексное решение, но, похоже, ничего не помогает. Вот методы, которые я пробовал, в порядке возрастания эффективности:

  • Используйте предоставленный Chrome tab.id: не сохраняется между сеансами браузера или закрытием/отменой закрытия
  • Поместите GUID в файлы cookie:не уникален для каждой вкладки, только для домена/URL
  • Поместите GUID в localStorage:сохраняется между сеансами браузера и закрытием/отменой закрытия, но не уникален для каждой вкладки, а только для домена
  • Поместите GUID в sessionStorage:уникальный p er, сохраняется при закрытии/отмене закрытия, уникально для дублированных вкладок, но стирается между сеансами браузера
  • Используйте идентифицируемые атрибуты документа веб-страницы в качестве уникального ключа:это лучший подход, который я нашел до сих пор. . Ключ может быть создан с помощью скрипта содержимого из следующих значений: [location.href, document.referrer, history.length].

Что касается этого последнего подхода, сконструированный ключ уникален для всех вкладок, которые имеют общий URL-адрес, реферер и длину истории. Эти значения останутся неизменными для данной вкладки между перезапусками браузера/восстановлением сеанса и закрытием/отменой закрытия. Хотя этот ключ «довольно» уникален, бывают случаи, когда он неоднозначен: например, 3 новые вкладки, открытые на http://www.google.com, будут иметь один и тот же общий ключ (и на практике такое случается довольно часто).

Метод «поместить GUID в sessionStorage» может дополнительно использоваться для устранения неоднозначности между несколькими вкладками с одним и тем же сконструированным ключом для случаев закрытия/отмены закрытия и дублирования вкладок во время текущего сеанса браузера. Но это не решает проблему неоднозначности между перезапусками браузера.

Эта последняя неоднозначность может быть частично устранена во время восстановления сеанса путем наблюдения за тем, какие вкладки Chrome открывает вместе в каких окнах, и экстраполяции для данного неоднозначного ключа, какая вкладка принадлежит какому окну, на основе наличия ожидаемых «родственных» вкладок (записанных во время предыдущий сеанс браузера). Как вы можете себе представить, реализация этого решения довольно сложная и довольно хитрая. И он может устранять неоднозначность только между вкладками с одинаковыми ключами, которые Chrome восстанавливает в разных окнах. Это оставляет вкладки с одним и тем же ключом, которые восстанавливаются в одно и то же окно, как непримиримо двусмысленные.

Есть ли лучший способ? Гарантированный уникальный, сгенерированный браузером, GUID для каждой вкладки, который сохраняется между перезапусками браузера (восстановлением сеанса) и закрытием/отменой закрытия, был бы идеальным, но пока я не нашел ничего подобного.

7
задан joelpt 12 June 2012 в 21:46
поделиться