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

551

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

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

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

p.s. Я не говорю о window.location.hash, et al. Если выше существует ответ на этот вопрос, будет неверно.

  • 3
    Возможно дублирование Изменить URL без перезагрузки страницы
  • 0
    @tobiaskienzler Когда этот вопрос был задан в 2009 году, это было невозможно.
Показать ещё 4 комментария
Теги:
google-chrome

3 ответа

727
Лучший ответ

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

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

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

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

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

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

  • 3
    Ах, функциональность есть в WebKit и появилась несколько месяцев назад < bugs.webkit.org/show_bug.cgi?id=36152 >. Хорошая находка!
  • 5
    теперь он используется github, а навигация по дереву
Показать ещё 7 комментариев
126

Изменение только того, что после хэш-старых браузеров

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');

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

  • 9
    replaceState был именно тем, что мне было нужно, спасибо за расширение оригинального ответа.
  • 0
    «Домен и протокол должны совпадать с оригиналом!» это препятствует тому, чтобы некоторый сайт рыбалки изменил адресную строку URL.
Показать ещё 3 комментария
13

Обновление до ответа Дэвидса даже на обнаружение браузеров не поддерживает pushstate:

if (history.pushState) {
  window.history.pushState("object or string", "Title", "/new-url");
} else {
  document.location.href = "/new-url";
}
  • 1
    document.location.href перезагрузит страницу
  • 3
    @paullb это запасной вариант для старых браузеров, которые не поддерживают ни один способ без перезагрузки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню