Besuch stackoverflow.com/#_=_ und window.location.hash wertet zu #_=_. Bußgeld.
Jetzt ausführen window.location.hash="" um den Hash zu löschen, und die URL wird stackoverflow.com/#. (Beachten Sie den Nachlauf #.)
Warum ist der # in window.location.hash uneinheitlich ein- oder ausgeschlossen? Wie kann die # aus der URL entfernt werden, ohne die Seite neu zu laden?
[the hash is] der Teil der URL, der auf das #-Symbol folgt, einschließlich des #-Symbols.
aber das gilt nicht für einen leeren Hash.)
Bei welchem Browser haben Sie dieses Verhalten beobachtet?
– Gumbo
10. März 2013 um 13:52 Uhr
Besuch stackoverflow.com/# ergibt sich auch window.location.hash === '' Es ist also ein konsistentes Verhalten.
– dev-null-Bewohner
10. März 2013 um 13:52 Uhr
Du sagst das manipulierend hash mit JavaScript führt zu # in URL und leer hash Eigentum. Besucht jetzt Seite mit nur # in URL führt ebenfalls zu leer hash Eigentum. hash -Eigenschaft wird nur gefüllt, wenn danach andere Zeichen folgen # in URL und es ist konsistentes Verhalten in allen Browsern.
– dev-null-Bewohner
10. März 2013 um 14:00 Uhr
Ich meine mich zu erinnern, dass IE das ‘#’ nicht als Teil der location.hash enthält – nur um auf eine andere Inkonsistenz hinzuweisen …
– Claude
10. März 2013 um 14:05 Uhr
dh scheint ‘file///’ am Anfang hinzuzufügen, wenn ein # am Ende einer URL hinzugefügt wird
– 124697
9. April 2013 um 13:26 Uhr
Zufallsblau
Zur Beantwortung der zweiten Frage (Entfernen der # ohne Seitenaktualisierung):
Gibt es eine Lösung für IE9? Ich habe es versucht window.location.href.replace( /#.*/, ""); aber es lädt die Seite neu.
– Pankit Kapadia
13. Mai 2015 um 6:34 Uhr
ricardohdz
Antwort auf deine erste Frage:
Laut dem window.location doc auf mozilla.org: “der Teil der URL, der auf das #-Symbol folgt, sofern vorhanden, einschließlich des #-Symbols. Leerer String, wenn die URL kein # enthält oder nichts nach dem # enthält.“
Seltsamerweise wurde dieses Dokument erst am 08.04.2013 aktualisiert. Nicht sicher, ob das hinzugefügt wurde, nachdem Sie die Dokumentation überprüft haben.
Übrigens (und in Bezug auf die Antworten) sind window.location.hash und pushState unterschiedliche Konzepte, obwohl sie eng miteinander verwandt sind.
Claude
Es gibt 2 Dinge, die dieses Verhalten antreiben:
“Das Festlegen der Hash-Eigenschaft navigiert zum benannten Anker, ohne das Dokument neu zu laden.” (hier)
“Wenn Sie das Standortobjekt oder eine seiner Eigenschaften außer Hash festlegen[…]In JavaScript 1.1 und höher hängt die Wirkung des Festlegens des Standorts von der Einstellung des Benutzers zum Vergleichen eines Dokuments mit dem Original über das Netzwerk ab.” (hier)
Grundsätzlich sollte das Festlegen der Hash-Eigenschaft niemals zu einem Neuladen führen, das Festlegen einer anderen Eigenschaft sollte zu einem Neuladen führen (oder vielleicht zu einer E-Tag/modified-since-Header-Prüfung, abhängig von den Browsereinstellungen).
Ich würde davon ausgehen, dass Browser-Builder aus Gründen der Konsistenz das Setzen eines leeren Hashs in das Setzen von „#“ als Hash umwandeln. So führt die URL in der Adressleiste nicht zu einem Reload. Aber dieser letzte Teil ist reine Spekulation.
Bei welchem Browser haben Sie dieses Verhalten beobachtet?
– Gumbo
10. März 2013 um 13:52 Uhr
Besuch
stackoverflow.com/#
ergibt sich auchwindow.location.hash === ''
Es ist also ein konsistentes Verhalten.– dev-null-Bewohner
10. März 2013 um 13:52 Uhr
Du sagst das manipulierend
hash
mit JavaScript führt zu#
in URL und leerhash
Eigentum. Besucht jetzt Seite mit nur#
in URL führt ebenfalls zu leerhash
Eigentum.hash
-Eigenschaft wird nur gefüllt, wenn danach andere Zeichen folgen#
in URL und es ist konsistentes Verhalten in allen Browsern.– dev-null-Bewohner
10. März 2013 um 14:00 Uhr
Ich meine mich zu erinnern, dass IE das ‘#’ nicht als Teil der location.hash enthält – nur um auf eine andere Inkonsistenz hinzuweisen …
– Claude
10. März 2013 um 14:05 Uhr
dh scheint ‘file///’ am Anfang hinzuzufügen, wenn ein # am Ende einer URL hinzugefügt wird
– 124697
9. April 2013 um 13:26 Uhr