Aktualizacja paska adresu z nowym adresem URL bez hasha lub przeładowania strony

Albo Śniło mi się, że chrome (Dev channel) implementuje sposób aktualizacji paska adresu za pomocą javascript (ścieżka, nie domena) bez przeładowywania strony, albo naprawdę to zrobili.

Jednak nie mogę znaleźć artykułu, który przeczytałem.

Zwariowałem czy jest na to jakiś sposób (w Chrome)?

P. s. nie mówię o oknie.miejsce.hash, et al. Jeśli powyższe istnieje odpowiedź na to pytanie będzie nieprawdziwa.

Author: Community, 2010-07-27

3 answers

Teraz możesz to zrobić w większości "nowoczesnych" przeglądarek!

Oto oryginalny artykuł, który przeczytałem (opublikowany w lipcu 10, 2010): HTML5: zmiana adresu URL przeglądarki bez odświeżania strony .

Aby uzyskać bardziej szczegółowe informacje na temat pushState/replaceState/popstate (aka HTML5 History API) Zobacz dokumenty MDN.

TL;DR, możesz to zrobić:

window.history.pushState("object or string", "Title", "/new-url");

Zobacz moją odpowiedź na zmodyfikuj adres URL bez przeładowywania strony , aby uzyskać podstawowe instrukcje.

 750
Author: David Murdoch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:57

Zmiana tylko tego, co po hash - starych przeglądarkach

document.location.hash = 'lookAtMeNow';

Zmiana pełnego adresu URL. Chrome, Firefox, IE10 +

history.pushState('data to be passed', 'Title of the page', '/test');

Powyższe spowoduje dodanie nowego wpisu do historii, więc możesz nacisnąć przycisk Wstecz, aby przejść do poprzedniego stanu. Aby zmienić adres URL bez dodawania nowego wpisu do historii, użyj

history.replaceState('data to be passed', 'Title of the page', '/test');

Spróbuj uruchomić je w konsoli teraz!

 112
Author: Pawel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-17 20:02:00

Update to Davids answer to even detect browsers doesn ' t support pushstate:

if (history.pushState) {
  window.history.pushState("object or string", "Title", "/new-url");
} else {
  document.location.href = "/new-url";
}
 10
Author: metamagicson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-04 11:01:52