История: метод replaceState()
Базовая Широко поддерживается
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.
Метод replaceState() интерфейса History изменяет текущую запись истории, заменяя её объектом состояния и URL, переданными в параметрах метода. Этот метод особенно полезен, когда необходимо обновить объект состояния или URL текущей записи истории в ответ на какое-либо действие пользователя.
Синтаксис
replaceState(state, unused) replaceState(state, unused, url)
Параметры
state-
Объект, связанный с записью истории, переданной методу
replaceState(). Объект состояния может бытьnull. unused-
Этот параметр существует по историческим причинам и не может быть опущен; передача пустой строки является традиционной и безопасной против будущих изменений метода.
urlНеобязательно-
URL записи истории. Новый URL должен быть того же происхождения, что и текущий URL; в противном случае метод
replaceState()вызывает исключение.
Возвращаемое значение
None (undefined).
Исключения
-
SecurityErrorDOMException -
Вызывается, если связанный документ не полностью активен или переданный параметр
urlне является допустимым URL. Браузеры также ограничивают навигацию и могут вызвать эту ошибку, сгенерировать предупреждение или проигнорировать вызов, если он слишком часто вызывается. -
DataCloneErrorDOMException -
Вызывается, если переданный параметр
stateне сериализуем.
Примеры
Предположим, https://www.mozilla.org/foo.html выполняет следующий JavaScript:
const stateObj = { foo: "bar" };
history.pushState(stateObj, "", "bar.html");
На следующей странице вы можете использовать history.state для доступа к stateObj, который только что был добавлен.
Объяснение этих двух строк выше можно найти в статье Работа с API истории. Затем предположим, что https://www.mozilla.org/bar.html выполняет следующий JavaScript:
history.replaceState(stateObj, "", "bar2.html");
Это приведет к отображению в строке URL https://www.mozilla.org/bar2.html, но не приведет к загрузке браузером bar2.html или даже к проверке существования bar2.html.
Предположим теперь, что пользователь переходит на https://www.microsoft.com, затем нажимает кнопку "Назад". В этот момент в строке URL будет отображаться https://www.mozilla.org/bar2.html. Если пользователь снова нажмёт "Назад", в строке URL будет отображаться https://www.mozilla.org/foo.html, и полностью пропустит страницу bar.html.
Спецификации
| Спецификация |
|---|
| HTML # dom-history-replacestate-dev |
Совместимость с браузерами
| Рабочие Столы | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
replaceState |
5 | 12 | 4До Firefox 5 переданный объект сериализовался с помощью JSON. Начиная с Firefox 6, объект сериализуется с помощью алгоритма структурированного клонирования. Это позволяет безопасно передавать более широкий спектр объектов. |
11.5 | 5 | 18 | 4До Firefox для Android 5 переданный объект сериализовался с помощью JSON. Начиная с Firefox для Android 6, объект сериализуется с помощью алгоритма структурированного клонирования. Это позволяет безопасно передавать более широкий спектр объектов. |
11.5 | 4 | 1.0 | ≤37 |
unused_parameter |
Нет | Нет | Нет | Нет | 5Функция может быть удалена, см. баг 223190. |
Нет | Нет | Нет | 4Функция может быть удалена, см. баг 223190. |
Нет | Нет |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState