Может ли кто-нибудь привести рабочий пример для history.replaceState? Вот что говорит w3.org :
history . replaceState(data, title [, url ] )
Обновляет текущую запись в истории сеанса, чтобы она содержала указанные данные, заголовок и, если он указан, а не null, URL.
Обновить:
Это отлично работает:
history.replaceState( {} , 'foo', '/foo' );
URL меняется, но заголовок не меняется. Это ошибка или я что-то упускаю? Проверено на последней версии Chrome.
javascript
ajax
html
Serjas
источник
источник
title
параметр фактически не используется.replaceState
пример, а принятый ответ никоим образом не являетсяreplaceState
примером.Ответы:
На самом деле это ошибка, но уже 2 года преднамеренная. Проблема заключается в некоторых неясных спецификациях и сложности, когда
document.title
задействованы и назад / вперед.См. Справку об ошибках в Webkit и Mozilla . Также Opera при внедрении History API заявила, что не использует параметр title и, вероятно, до сих пор не использует.
Возможное решение
Единственный способ, который я вижу, - это изменить элемент заголовка и вместо этого использовать pushState:
источник
replaceState()
и простая установка заголовка документа вручнуюdocument.title = "title"
Вот минимальный надуманный пример.
Это еще не все,
replaceState()
но я не знаю, что именно вы хотите с этим делать.источник
title
Параметр inreplaceState()
, насколько мне известно, игнорируется во всех браузерах.history.pushState
помещает текущее состояние страницы в стек истории и изменяет URL-адрес в адресной строке. Итак, когда вы вернетесь, это состояние (объект, который вы передали) будет возвращен вам.В настоящее время это все, что он делает. Любые другие действия на странице, такие как отображение новой страницы или изменение заголовка страницы, должны выполняться вами.
Спецификация W3C, на которую вы ссылаетесь, является всего лишь черновиком, и браузер может реализовать ее по-другому. Например, Firefox
title
полностью игнорирует параметр.Вот простой пример,
pushState
который я использую на своем веб-сайте.источник
replaceState
меняет текущее состояние страницы. Он позволяет вам изменить объект состояния и URL-адрес текущего состояния страницы.посмотрите на пример
и поиск
location.hash
;источник
Второй аргумент Заголовок не означает заголовок страницы - это скорее определение / информация о состоянии этой страницы.
Но мы все еще можем изменить заголовок с помощью события onpopstate и передать имя заголовка не из второго аргумента, а как атрибут из первого параметра, переданного как объект
Ссылка: http://spoiledmilk.com/blog/html5-changing-the-browser-url-without-refreshing-page/
источник
Согласно документу истории MDN.
Здесь ясно сказано, что второй аргумент на будущее используется, а не сейчас. Вы правы, что второй аргумент касается заголовка веб-страницы, но в настоящее время он игнорируется всеми основными браузерами.
Firefox в настоящее время игнорирует этот параметр, хотя может использовать его в будущем. Передача здесь пустой строки должна быть защищена от будущих изменений метода. Как вариант, вы можете передать краткое название состояния, в которое вы переходите.
источник
Я очень хотел ответить на ответ @Sev.
Сев прав, внутри ошибка
window.history.replaceState
источник
Предположим, https://www.mozilla.org/foo.html выполняет следующий код JavaScript:
В результате в строке URL отобразится https://www.mozilla.org/bar2.html , но браузер не загрузит bar2.html или даже не проверит, существует ли bar2.html.
источник