Czy ktoś może podać działający przykład dla history.replaceState? Co to jest mówi w3.org :
history . replaceState(data, title [, url ] )
Aktualizuje bieżący wpis w historii sesji, aby zawierał podane dane, tytuł i, jeśli podano, a nie pusty, adres URL.
Aktualizacja:
Działa to doskonale:
history.replaceState( {} , 'foo', '/foo' );
Adres URL się zmienia, ale tytuł się nie zmienia. Czy to błąd, czy coś mi brakuje? Przetestowano w najnowszej wersji Chrome.
javascript
ajax
html
Serjas
źródło
źródło
title
parametr nie jest faktycznie wykorzystywany.replaceState
przykładu, a zaakceptowana odpowiedź w żaden sposób nie jestreplaceState
przykładem.Odpowiedzi:
Rzeczywiście jest to błąd, chociaż zamierzony od 2 lat. Problem polega na niejasnych specyfikacjach i złożoności, kiedy
document.title
są zaangażowane i wstecz / dalej.Zobacz informacje o błędach w Webkit i Mozilli . Również Opera po wprowadzeniu History API powiedziała, że nie używa parametru tytułu i prawdopodobnie nadal tego nie robi.
Potencjalne rozwiązanie
Jedynym sposobem, w jaki widzę, jest zmiana elementu tytułu i zamiast tego użycie pushState:
źródło
replaceState()
document.title = "title"
Oto minimalny, wymyślony przykład.
Jest coś więcej,
replaceState()
ale nie wiem, co dokładnie chcesz z tym zrobić.źródło
title
parametr inreplaceState()
jest ignorowany we wszystkich przeglądarkach.history.pushState
umieszcza bieżący stan strony na stosie historii i zmienia adres URL w pasku adresu. Tak więc, kiedy wrócisz, ten stan (przekazany obiekt) zostanie Ci zwrócony.Obecnie to wszystko, co robi. Wszelkie inne działania na stronie, takie jak wyświetlenie nowej strony lub zmiana tytułu strony, muszą zostać wykonane przez Ciebie.
Specyfikacja W3C, którą łączysz, to tylko wersja robocza, a przeglądarka może implementować ją inaczej. Na przykład Firefox ignoruje rozszerzenie
title
całkowicie parametr.Oto prosty przykład tego
pushState
, którego używam na mojej stronie internetowej.źródło
replaceState
zmienia obecny stan strony. Pozwala zmienić obiekt stanu i adres URL bieżącego stanu strony.Spójrz na przykład
i szukaj
location.hash
;źródło
Drugi argument Tytuł nie oznacza tytułu strony - jest to raczej definicja / informacja o stanie tej strony
Ale nadal możemy zmienić tytuł za pomocą zdarzenia onpopstate i przekazać nazwę tytułu nie z drugiego argumentu, ale jako atrybut z pierwszego parametru przekazanego jako obiekt
Źródła: http://spoiledmilk.com/blog/html5-changing-the-browser-url-without-refreshing-page/
źródło
Według MDN History doc
Jest wyraźnie powiedziane, że drugi argument dotyczący przyszłości nie jest używany na razie. Masz rację, drugi argument dotyczy tytułu strony internetowej, ale obecnie jest on ignorowany przez wszystkie główne przeglądarki.
Firefox obecnie ignoruje ten parametr, chociaż może go używać w przyszłości. Podanie w tym miejscu pustego ciągu powinno być zabezpieczone przed przyszłymi zmianami metody. Alternatywnie możesz podać krótki tytuł dla stanu, do którego się przenosisz.
źródło
Naprawdę chciałem odpowiedzieć na odpowiedź @ Seva.
Sev ma rację, jest błąd w pliku
window.history.replaceState
źródło
Załóżmy, że https://www.mozilla.org/foo.html wykonuje następujący JavaScript:
Spowoduje to, że pasek adresu URL wyświetli https://www.mozilla.org/bar2.html , ale nie spowoduje załadowania przeglądarki bar2.html ani nawet sprawdzenia, czy bar2.html istnieje.
źródło