Очистка хэша URL

Визит stackru.com/#_=_ а также window.location.hash оценивает #_=_, Хорошо.

Теперь выполните window.location.hash = '' очистить хеш, и URL становится stackru.com/#, (Обратите внимание на конечный #.)

Почему # в window.location.hash непоследовательное включение или исключение? Как можно # быть удалены из URL без перезагрузки страницы?

( MDN говорит

[хеш является] частью URL, которая следует за символом #, включая символ #.

но это не так для случая с пустым хешем.)

4 ответа

Решение

Чтобы ответить на второй вопрос (удаление # без обновления страницы):

history.pushState('', document.title, window.location.pathname);

Отвечая на ваш первый вопрос:

В соответствии с документом window.location в Mozilla.org: "часть URL, которая следует за символом #, если есть, включая символ #. Пустая строка, если URL не содержит # или ничего не стоит после #."

Любопытно, что этот документ был только что обновлен 8/4/2013. Не уверен, что это было добавлено после того, как вы проверили документацию.

Кстати (и со ссылкой на ответы), window.location.hash и pushState - это разные понятия, хотя они тесно связаны.

Есть 2 вещи, управляющие этим поведением:

  • Msgstr "Установка свойства hash позволяет перейти к указанному якору без перезагрузки документа." ( здесь)
  • "Когда вы устанавливаете объект местоположения или любое из его свойств, кроме хэша [...] в JavaScript 1.1 и более поздних версиях, эффект настройки местоположения зависит от настроек пользователя для сравнения документа с оригиналом по сети". ( здесь)

Таким образом, в основном, установка свойства hash никогда не должна приводить к перезагрузке, установка любого другого свойства должна приводить к перезагрузке (или, возможно, проверке заголовка E-Tag/ified-Since, в зависимости от настроек браузера).

Я бы предположил, что ради согласованности, конструкторы браузеров преобразуют установку пустого хэша в установку '#' в качестве хэша. Таким образом, URL в строке адреса не приводит к перезагрузке. Но эта последняя часть - чистое предположение.

Я имел дело с той же проблемой около двух недель назад, и я пришел к выводу, что не было хорошего решения. Прямого решения не существует, удаление хеша из URL всегда вынуждает браузер перезагрузить страницу, и даже если бы существовало не совсем подходящее решение, похожее на взлом, я бы предпочел иметь хеш в конце URL-адреса, а не использовать неясные решения.

Другие вопросы по тегам