History.replaceState()

Метод History.replaceState() изменяет текущую запись в истории, заменяя её на значения stateObj, title и URL, передаваемые в параметрах метода. Данный метод особенно полезен, когда вы хотите обновить объект состояния или URL текущей записи в истории в ответ на какое-то действие пользователя.

Синтаксис

history.replaceState(stateObj, title, [url])

Параметры

stateObj

Объект состояния – это JavaScript-объект, связанный с записью в истории, переданной в метод replaceState(). Объект состояния может быть null.

title

Заголовок - все браузеры, кроме Safari, на данный момент игнорируют этот параметр, но могут начать использовать в будущем. Ввиду будущих изменений метода, безопасным решением является передача пустой строки. В качестве альтернативы вы можете передать короткий заголовок для состоянии, в которое переходите.

url Необязательный

URL-адрес записи в истории. Новый URL должен вести на тот же домен, протокол и порт, иначе pushState() выдаст исключение.

Примеры

Предположим, на странице http://mozilla.org/foo.html выполняется следующий JavaScript-код:

let stateObj = { foo: "bar" }
history.pushState(stateObj, "page 2", "bar.html")

Объяснение этих двух строк можно найти в приведённом выше разделе пример метода pushState().

Далее, предположим, на странице http://mozilla.org/bar.html выполняется JavaScript-код:

history.replaceState(stateObj, "page 3", "bar2.html")

Это приведёт к тому, что в URL-строке отобразится адрес http://mozilla.org/bar2.html, но браузер не станет сразу загружать bar2.html и даже не станет проверять наличие этой страницы bar2.html.

Теперь предположим, что пользователь переходит по адресу http://www.microsoft.com, а затем нажимает на кнопку "Назад". В этом случае в URL-строке отобразится http://mozilla.org/bar2.html. Если же пользователь снова нажмёт на кнопку "Назад", в URL-строке отобразится http://mozilla.org/foo.html и полностью обойдёт bar.html.

Спецификации

Specification
HTML Standard
# dom-history-replacestate-dev

Совместимость с браузерами

BCD tables only load in the browser