Обновление адресной строки новым URL без хэша или перезагрузка страницы

Я либо мечтал о том, чтобы chrome (dev channel) реализовал способ обновления адресной строки через javascript (путь, а не домен) без перезагрузки страницы, или они действительно сделали это.

Тем не менее, я не могу найти статью, которую, как мне кажется, я прочитал.

Я сумасшедший или есть способ сделать это (в Chrome)?

ps Я не говорю о window.location.hash и др. Если вышеизложенное существует, ответ на этот вопрос будет неверным.

3 ответа

Решение

Теперь вы можете сделать это в большинстве "современных" браузеров!

Вот оригинальная статья, которую я прочитал (опубликовано 10 июля 2010 г.): HTML5: изменение URL-адреса браузера без обновления страницы.

Для более глубокого изучения pushState/replaceState/popstate (он же HTML5 History API) см. Документы MDN.

TL; DR, вы можете сделать это:

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

См. Мой ответ на Изменение URL-адреса без перезагрузки страницы для ознакомления с основными инструкциями.

Меняется только то, что после хеша - старые браузеры

document.location.hash = 'lookAtMeNow';

Изменение полного URL. Chrome, Firefox, IE10+

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

Выше добавит новую запись в историю, так что вы можете нажать кнопку Назад, чтобы перейти в предыдущее состояние. Чтобы изменить URL на месте без добавления новой записи в историю, используйте

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

Попробуйте запустить их в консоли сейчас!

Обновление ответа Davids, чтобы даже обнаружить, что браузеры не поддерживают pushstate:

if (history.pushState) {
  window.history.pushState("object or string", "Title", "/new-url");
} else {
  document.location.href = "/new-url";
}
var newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?foo=bar';
window.history.pushState({path:newurl},'',newurl);
Другие вопросы по тегам