History.replaceState()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Метод 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
# dom-history-replacestate-dev

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

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
replaceState
Whether the unused parameter is used
DeprecatedNon-standard

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Non-standard. Check cross-browser support before using.
Deprecated. Not for use in new websites.
See implementation notes.