Заголовок history.pushState не поддерживается, какая хорошая альтернатива?
Второй параметр History.pushState
и History.replaceState
может использоваться для установки "заголовка" записи истории.
Это означает, что когда пользователь нажимает на странице 1 на страницу 8, это то, что он должен увидеть в своей истории:
![enter image description here]()
И он работает над Safari и Opera.
Но в Chrome и FireFox это то, что видит пользователь:
![enter image description here]()
Попытка изменить document.title
не работает, поскольку он изменяет все записи в заголовке истории:
![enter image description here]()
Какое лучшее решение этой проблемы?
Мы вынуждены использовать только один заголовок истории для всех страниц, реализованных с помощью pushState
и replaceState
?
Ответы
Ответ 1
History.js изящно поддерживает API-интерфейсы истории/состояния HTML5 (pushState, replaceState, onPopState) во всех браузерах.
Взгляните на демо здесь
Пример использования:
History.pushState({state:1}, "State 1", "?state=1"); // logs {state:1}, "State 1", "?state=1"
History.pushState({state:2}, "State 2", "?state=2"); // logs {state:2}, "State 2", "?state=2"
History.replaceState({state:3}, "State 3", "?state=3"); // logs {state:3}, "State 3", "?state=3"
History.pushState(null, null, "?state=4"); // logs {}, '', "?state=4"
History.back(); // logs {state:3}, "State 3", "?state=3"
History.back(); // logs {state:1}, "State 1", "?state=1"
History.back(); // logs {}, "Home Page", "?"
History.go(2); // logs {state:3}, "State 3", "?state=3"
Ответ 2
У меня была такая же проблема, и, похоже, вы ошибаетесь.
Если History.js действительно поддерживает его, вы тоже можете. Посмотрев исходный код, кажется, что история JS делает это следующим образом:
https://github.com/browserstate/history.js/blob/master/scripts/uncompressed/history.js#L1293
try {
document.getElementsByTagName('title')[0].innerHTML = title.replace('<','<').replace('>','>').replace(' & ',' & ');
}
catch ( Exception ) { }
document.title = title;
Я тестировал, и он отлично работает для меня с Chrome: он не "переписывает" целые истории. Однако кажется, что возвращение назад или вперед может привести к перезагрузке страницы, которая в конечном итоге может повторно инициализировать этот заголовок.