Как рассчитать индекс текущей страницы в пути навигации по страницам? (Браузер) - PullRequest
0 голосов
/ 23 января 2019

Я делаю модуль сохранения / восстановления состояния (https://github.com/naver/egjs-persist) для восстановления состояния, такого как BFCache, предоставляемого Safari. Однако есть проблема, которая использует пространство без необходимости. Я пытался решить эту проблему, ноЯ не удовлетворен этим.

Обзор и проблемы текущих модулей

Мы создали модуль для запоминания предыдущего состояния при переходе на предыдущую или следующую страницу в истории страницы натот же источник.

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

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

КАК ЕСТЬ

  • Однако текущая реализация представляет собой большую проблему. При перемещении по странице сохраненные значения состояния не будут удалены и будут накапливаться.Поскольку существует ограничение на объем хранилища (2–10 МБ), существует проблема, превышающая объем хранилища.

Ссылка на изображение: как есть

TO BE

  • При перемещении страницы ненужная информация о хранилище должна быть удалена на основе текущей страницы.

Ссылка на изображение: TO BE

Трудность в решении проблем

Чтобы решить эту проблему, требуется метод удаления ненужных данных.

Чтобы устранить ненужные значения состояния, реализуемый метод заключается в следующем.

Когда ранее перемещенные страницы исключаются из цели для перемещения назад или вперед на основе текущей страницы, то удаляет состояние ненужных страниц из хранилища сеанса.Например, если вы переместитесь со страницы A на страницу B, а затем снова вернетесь к странице C, страница B будет недоступна для Назад или Вперед.Следовательно, информация о статусе страницы B должна быть очищена.

Концепция реализации состоит в том, чтобы отобразить информацию о глубине для каждого пути перемещения страницы.Если глубина недавно перемещенной страницы меньше или равна существующей глубине страницы в хранилище сеанса, существующая информация о странице, существующая ниже глубины, удаляется.

Однако я сталкиваюсь с некоторыми трудностями при решении проблемы.

  1. Нет API браузера для получения информации о глубине
  2. Невозможно использовать или обновить информацию о состоянии истории

  3. Историямаксимальная длина - 50, а длина истории - основа глубины (на основе Chrome).

  4. Невозможно различить, является ли навигация Назад или Вперед. (TYPE_BACK_FORWARD)
  5. Длительное нажатие на кнопку «Назад / Вперед», а также навигация по предыдущей странице позволяют пропустить несколько шагов.

Неполная альтернатива

Итак, яо том, как рассчитать виртуальную глубину на основе URL-адреса страницы.

То есть мы добавляем глубину каждый раз, когда переходим на новую страницу.Например, если вы перемещаетесь в порядке A -> B -> C, вы можете случайным образом назначать глубины соответственно 1, 2 и 3.

Однако эта альтернатива также сталкивается с двумя проблемами:

1. A -> B -> C -> A (каждая перемещена на новую страницу). Значение состояния будет перезаписано.

2. A -> B -> C -> A -> D (каждый перемещен на новую страницу) Вы не можете узнать глубину текущего A (1-го или 4-го), если вы перемещаете шаги с помощью длинного нажатия Назад.Кнопка.

History.state не может быть использован, потому что он может быть перезаписан.Поэтому Как найти текущий индекс местоположения в истории браузера не может быть применено.

В этой ситуации можно компенсировать следующим образом, но это не таклибо идеальное решение.

  1. Вы можете дополнить значение длины истории, создав ключ для каждой страницы в сочетании с URL, но если вы превысите 50, возникнет та же проблема.
  2. Невозможно избежать возможности дублирования, даже если ключ к странице объединен с URL-адресом Referrer.

В настоящее время я работаю над вышеуказанной проблемой, но я хотел бы спросить васдальнейший совет.Я хотел бы добавить заметку в репозиторий github как проблему.

https://github.com/naver/egjs-persist/issues/33

Заранее спасибо.

...