Представьте себе следующий сценарий:
Пользователь переходит на https://mywebsite.com
, ищет что-то и нажимает [submit]
.Результаты отображаются и URL-адрес теперь https://mywebsite.com/floobah?q=burp
.Пользователь нажимает на якорь, который прокручивает страницу вниз до div, чтобы выбрать способ визуализации результата.URL теперь https://mywebsite.com/floobah?q=burp#viz
.Пользователь выбирает виджет круговой диаграммы и отображает круговую диаграмму и связанные с ней данные.Теперь URL-адрес https://mywebsite.com/floobah?q=burp&chart=pie&sort=asc#viz
.
Затем пользователь отправляет URL-адрес другу.Когда его получатель открывает этот URL, состояние восстанавливается в точности так, как оно было для отправителя.Другими словами, URL-адрес анализируется, и выполняются действия для восстановления состояния… выполняется запрос, страница прокручивается вниз до раздела viz , круговая диаграмма открывается, и связанные данные отображаются отсортированными в видезапрашивается.
Я делаю это прямо сейчас, анализируя URL и повторяя все шаги.Но наверняка уже должна быть библиотека для этого, не так ли?Подводя итог, я хочу, чтобы состояние страницы закодировано в URL-адресе, которое может быть передано и затем воссоздано получателем закладки URL.
Обновление 1: Проблема с моим URL-адресом какотмеченное выше https://mywebsite.com/floobah?q=burp&chart=pie&sort=asc#viz
состоит в том, что нет способа провести различие между истинным параметром запроса, таким как q=burb
, и чем-то, что было результатом нажатия на элемент с подключенным прослушивателем событий, например, для chart=pie&soft=asc
.Мне нужно иметь возможность различать команды для обработки событий, строки запроса и хэша (#viz
)
Обновление 2: Итак, у меня есть три набора параметров: queryString, которыйобработанные на сервере события, которые обрабатываются на клиенте, и фрагмент хеша, который указывает привязку на странице, на которую прокручивается браузер.Что если я отмечу события !
?Представь себе https://mywebsite.com/floobah?q=burp!makePieChart!sortAscending#viz
.QueryString q=burp
обрабатывается сервером и возвращается клиенту, который прокручивает до #viz
и генерирует события до makePieChart
и sortAscending
.Мысли?