Очистка хэша URL
посетить stackoverflow.com/#_=_
и window.location.hash
значение #_=_
. Штраф.
теперь выполнить window.location.hash = ''
чтобы очистить хэш, и URL-адрес становится stackoverflow.com/#
. (Обратите внимание на трейлинг #
.)
почему #
на window.location.hash
непоследовательно включено или исключено? Как #
удалить из URL без перезагрузки страницы?
(MDN говорит
[хэш-это] часть URL-адреса, которая следует за символом#, включая символ.
но это неверно в случае пустого хэша.)
4 ответов
чтобы ответить на второй вопрос (удаление #
без обновления страницы):
history.pushState('', document.title, window.location.pathname);
отвечая на ваш первый вопрос:
по словам окно.местоположение doc in Mozilla.org: " часть URL, которая следует за символом#, если он есть, включая символ#. пустая строка, если url-адрес не содержит # или не имеет ничего после #."
Любопытно, что этот документ был обновлен только 4/8/2013. Не уверен, что это было добавлено после проверки документации.
кстати (и в ссылка на ответы), окно.местоположение.хэш и pushState-это разные понятия, хотя и тесно связанные.
есть 2 вещи, управляющие этим поведением:
- " установка свойства hash переходит к именованному якорю без перезагрузки документа."(здесь)
- " при установке объекта location или любого из его свойств, кроме hash[...]В JavaScript 1.1 и более поздних версиях эффект установки местоположения зависит от настройки пользователя для сравнения документа с оригиналом по сети."(здесь)
Так в основном, установка свойства hash никогда не должна приводить к перезагрузке, установка любого другого свойства должна приводить к перезагрузке (или, возможно, e-Tag/modified-since header check, в зависимости от настроек браузера).
Я бы предположил, что для согласованности строители браузера преобразуют настройку пустого хэша в настройку " # " в качестве хэша. Таким образом, URL-адрес в адресной строке не приводит к перезагрузке. Но последняя часть - чистая спекуляция.
Я занимался той же проблемой около двух недель назад, и мой вывод заключался в том, что хорошего решения не было. Прямого решения нет, удаление хэша из URL всегда заставляло браузер перезагружать страницу, и даже если бы было некрасивое Хак-подобное решение, я бы предпочел иметь хэш в конце url, чем использовать неясные решения.