Очистка хэша 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-адреса, а не использовать неясные решения.