Visitez stackoverflow.com/#_=_
Et window.location.hash
Est évalué à #_=_
. Bien.
Exécutez maintenant window.location.hash = ''
Pour effacer le hachage, et l'URL devient stackoverflow.com/#
. (Remarquez le #
De fin.)
Pourquoi le #
Dans window.location.hash
Est-il inclus ou exclu de manière incohérente? Comment le #
Peut-il être supprimé de l'URL sans recharger la page?
( MDN dit
[le hachage est] la partie de l'URL qui suit le symbole #, y compris le symbole #.
mais ce n'est pas vrai dans le cas d'un hachage vide.)
Pour répondre à la deuxième question (en supprimant le #
sans actualisation de page):
history.pushState('', document.title, window.location.pathname);
Répondre à votre première question:
Selon le window.location doc dans Mozilla.org: "la partie de l'URL qui suit le symbole #, s'il y en a un, y compris le symbole #. Chaîne vide si l'url ne contient pas # ou n'a rien après le #. "
Curieusement, ce document vient d'être mis à jour le 4/8/2013. Je ne sais pas si cela a été ajouté après avoir vérifié la documentation.
Soit dit en passant (et en référence aux réponses), window.location.hash et pushState sont des concepts différents bien que étroitement liés.
Il y a 2 facteurs à l'origine de ce comportement:
Donc, fondamentalement, la définition de la propriété de hachage ne doit jamais conduire à un rechargement, la définition de toute autre propriété doit conduire à un rechargement (ou peut-être une vérification de l'en-tête E-Tag/modifié depuis, en fonction des paramètres du navigateur).
Je suppose que, par souci de cohérence, les constructeurs de navigateurs transforment la définition d'un hachage vide, en définissant "#" comme hachage. De cette façon, l'URL dans la barre d'emplacement ne conduit pas à un rechargement. Mais cette dernière partie n'est que pure spéculation.