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