86
window.history.replaceState(state, title, url);

Вот она :)

state - может быть объектом, может быть строкой, что менять

url - строка, на что менять

title - новый title страницы

Недавно во всем известной соц.сети появились переходы по страницам без выключения музыки, т.е. вы ходили по страницам, url менялся, а звук не пропадал. Сначала у меня была мысль про кэширование страниц браузером, но потом отпала, слишком уж быстро и без задержек это происходило.

И вот наткнулся методом гугла на вот такую вот фичу в html5.

Есть 2 функции - replaceState и pushState:

Функция pushState добавляет запись в history браузера, в то время как replaceState заменяет текущий url.

Пользуйтесь, кто еще не знал :)

Alex Silaev
  • 4,042
  • 1
  • 17
  • 26
  • 3
    Добавлю: http://htmlbook.ru/html5/history . – ling Jun 10 '11 at 04:09
  • 4
    Непрерывность звука с этой фичой не связано напрямую. Дело в том, что страница никуда не девается, поэтому музыка остаётся. Так что у вас всегда загружено две страницы вместо одной (это легко заметить.. иногда после обновления сначала появляется первая, а потом вторая). Так что фокус очень легко делается и без этих функций. Тем не менее, наконец-то появились нормальные функции по управлению историей. – cy6erGn0m Jun 10 '11 at 07:11
  • «Так что фокус очень легко делается и без этих функций». Ну да, только нормальные урлы сделать не получится. В чём и главная фишка описываемой штуки. – Артём Сапегин Jun 10 '11 at 08:32
  • 1

    Так что фокус очень легко делается и без этих функций.

    Фокус не пройдет, т.к. URL в адресной строке останется прежним. Максимум что можно будет сделать в HTML 4, это изменит anchor.

    Наглядный пример: выполните в консоли браузера window.history.replaceState(null, null, '/hello-changed-world');

    – Ilya Pirogov Jun 10 '11 at 08:36
  • Ну да, фокус не пройдет, мы говорим о разных вещах. Я писал о замене url, без дурацкий хэшей вида #..., а @cy6erGn0m пишет о технике ajax. – Alex Silaev Jun 10 '11 at 10:41
  • 1
    Эта великая строчка работает в IE9? Ну или более старых. – ivkremer Sep 30 '11 at 21:16
  • @Kremchik, только IE10 – Ilya Pirogov Oct 01 '11 at 06:02
  • 1
    Kremchik, только что проверил. Это конечно забавно, но срабатывает один раз из 10-15 случаев. Хотя чего я удивляюсь, у ИЕ карма испорчена окончательно. – Arni Oct 01 '11 at 08:20
  • ИЕ отец всего что сейчас есть в WWW, относитесь к нему с уважением xD –  Oct 01 '11 at 08:22
  • Это открытие... Я был уверен, что просто не работает... Ну либо что я что-то не так делаю) – ivkremer Oct 01 '11 at 08:22
  • этому методу уже несколько лет, т.е. боян. см. http://diveintohtml5.info/history.html – SanŚ́́́́Ý́́́́Ś́́́́ Jun 03 '15 at 09:25
  • работаю на angular и reactjs, думаю можно просто использовать роутинг без перезагрузки страницы для таких целей – Vahan May 26 '20 at 23:11

2 Answers2

38

Также рекомендуется ознакомиться с PJAX:

ReCoder
  • 729
  • 1
    pjax - это собственно правильное использование этих функций :) – Alex Silaev Jun 10 '11 at 07:53
6

Мне кажется что добавить в список http://www.kendoui.com/ нужно обязательно. Очень и очень забавная игрушка.

Nofate
  • 34,603
Arni
  • 1,844
  • А причем здесь штука для UI? Или там что-то есть такое для window.history? – komka Jan 26 '12 at 20:14