2014-01-31 2 views
1

Мне нужно активировать перезагрузку страницы через JS, сохраняя положение вертикальной прокрутки.Лучший способ передать одноразовое значение между запросами с использованием JavaScript

Я использую решение, описанное в another SO question:

  1. Вычислить текущую позицию прокрутки
  2. Добавить текущую позицию в качестве аргумента строки запроса, а затем перенаправить
  3. Когда перезагружает страницу, прочитать значение из строки запроса & отрегулируйте позы прокрутки

Однако я только хочу, чтобы восстановить положение прокрутки на этом ПЕРВОЕ перенаправление. Если пользователь прокручивает страницу и затем запускает команду перезагрузить, используя Ctrl-R, я НЕ хочу перепрошивать эту сохраненную позицию.

Есть ли способ передать одноразовое, видимое-на-следующее-запрос значение только с использованием ТОЛЬКО JavaScript? Или удалить значение из document.location.hrefбез перенаправление?

Должен ли я использовать API истории HTML 5, чтобы «очистить» значение позиции после того, как я его использовал?

+0

Моя первая мысль заключается в использовании куки/сессии, чтобы сохранить эту переменную, а затем удалить его после того, как вы его использовали. – Populus

+0

@Populus, я думал об использовании файлов cookie, но не могу использовать фиксированное имя файла cookie, иначе я мог бы столкнуться с проблемами, если один пользователь имеет несколько вкладок, открытых для разных страниц, каждый из которых пытается использовать эту функцию. Хотя, как и w/localStorage, я предполагаю, что могу использовать полный URL-адрес для создания уникального имени cookie, чтобы избежать столкновений. –

+0

, если вы не обновили всю страницу, а только часть, которая нуждается в обновлении? – Populus

ответ

2

Сохраните значение для sessionStorage. После его использования удалите значение, чтобы его нельзя было прочитать при обновлении вручную.

sessionStorage.setItem("scroll_position", "300"); 
sessionStorage.getItem("scroll_position"); // 300 
sessionStorage.removeItem("scroll_position"); 

sessionStorage is really well-supported - это будет работать нормально для IE8 + любых соответствующих версий других браузеров.


StackOverflow обрабатывает после страниц нагрузки прокруткой, храня разместить идентификаторы в URL хэш. Вы могли бы это сделать.

URL-адрес stackoverflow.com/...../21485393#21485393 имеет # 21485393, который соответствует анкерный элемент <a name="21485393"></a> Она будет автоматически прокручивать к этому элементу после загрузки страницы.

Вы могли бы сделать что-то подобное.

http://your.url.com/page#300 

Получить его

window.location.hash 

И удалить его, как только вы закончите с помощью

window.location.hash = "" 
+0

Был на полпути, предлагая то же самое! – ChrisIPowell

+0

localStorage - это потрясающе. Это так широко поддерживается ...такой ninja –

+0

Я думал о localStorage, но думал, что это хранилище в браузере, а не в хранилище для каждого браузера, что означает, что у меня могут быть проблемы, если у пользователей есть несколько вкладок. Полагаю, я мог бы использовать полный URL-адрес при создании ключа ... –

Смежные вопросы