javascript Cancellazione dell'hash URL




html url-routing (4)

Visita window.location.hash e window.location.hash #_=_ . Belle.

Ora esegui window.location.hash = '' per cancellare l'hash, e l'URL diventa stackoverflow.com/# . (Si noti il ​​#iling finale).

Perché il # in window.location.hash incoerentemente incluso o escluso? Come può il # essere rimosso dall'URL senza ricaricare la pagina?

(Dice MDN

[l'hash è] la parte dell'URL che segue il simbolo #, incluso il simbolo #.

ma questo non è vero nel caso di un hash vuoto.)


Answer #1

Rispondere alla tua prima domanda:

Secondo il MDN in Mozilla.org: "la parte dell'URL che segue il simbolo #, se ce n'è una, incluso il simbolo #. Stringa vuota se l'url non contiene # o non ha nulla dopo il #. "

Curiosamente, il documento è stato appena aggiornato il 4/8/2013. Non sono sicuro se è stato aggiunto dopo aver controllato la documentazione.

A proposito (e in riferimento alle risposte), window.location.hash e pushState sono concetti diversi anche se strettamente correlati.


Answer #2

Per rispondere alla seconda domanda (rimuovendo il # senza un aggiornamento della pagina):

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

Answer #3

Ho avuto a che fare con lo stesso problema circa due settimane fa e la mia conclusione è stata che non c'era una buona soluzione. Non esiste una soluzione diretta, la rimozione dell'hash dall'URL obbliga sempre il browser a ricaricare la pagina e, anche se esistesse una soluzione non semplice simile a una hack, preferirei avere l'hash alla fine dell'URL piuttosto che usare soluzioni oscure.


Answer #4

Ci sono 2 cose che guidano questo comportamento:

  • "L'impostazione della proprietà hash passa all'ancora denominata senza ricaricare il documento." ( here )
  • "Quando si imposta l'oggetto posizione o una delle sue proprietà eccetto hash [...] In JavaScript 1.1 e versioni successive, l'effetto dell'impostazione della posizione dipende dalle impostazioni dell'utente per il confronto di un documento con l'originale sulla rete." ( here )

Quindi, in pratica, l'impostazione della proprietà hash non dovrebbe mai portare a un ricaricamento, l'impostazione di qualsiasi altra proprietà dovrebbe portare a un ricaricamento (o forse un E-Tag / modificato dal controllo dell'intestazione, a seconda delle impostazioni del browser).

Suppongo che, per motivi di coerenza, i costruttori di browser trasformano l'impostazione di un hash vuoto, impostando "#" come hash. In questo modo l'url nella barra degli indirizzi non porta a una ricarica. Ma quest'ultima parte è pura speculazione.





window.location