URL-Hash löschen

Lesezeit: 3 Minuten

Benutzer-Avatar
Zufallsblau

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?

(MDN sagt

[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

Benutzer-Avatar
Zufallsblau

Zur Beantwortung der zweiten Frage (Entfernen der # ohne Seitenaktualisierung):

history.pushState('', document.title, window.location.pathname);

  • Hinweis: pushState ist IE10 und höher.

    – Jay Kyburz

    8. Oktober 2013 um 10:50 Uhr

  • ich bevorzuge replaceState um das zu erreichen.

    – Banago

    13. April 2015 um 13:11 Uhr

  • 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

Benutzer-Avatar
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.

Benutzer-Avatar
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.

1073990cookie-checkURL-Hash löschen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy