C’è un modo per cambiare la barra degli indirizzi del browser senza aggiornare la pagina?

Sto sviluppando un’applicazione web. In esso ho una sezione chiamata categorie che ogni volta che un utente fa clic su una delle categorie un pannello di aggiornamento carica il contenuto appropriato.

Dopo che l’utente ha fatto clic sulla categoria, desidero modificare l’URL della barra degli indirizzi del browser

www.mysite.com/products 

a qualcosa di simile

 www.mysite.com/products/{selectedCat} 

senza aggiornare la pagina.
C’è qualche tipo di API JavaScript che posso usare per ottenere questo?

Con HTML5 puoi modificare l’url senza ricaricare:

Se vuoi creare un nuovo post nella cronologia del browser (cioè il pulsante Indietro funzionerà)

 window.history.pushState('Object', 'Title', '/new-url'); 

Se vuoi solo cambiare l’URL senza poter tornare indietro

 window.history.replaceState('Object', 'Title', '/another-new-url'); 

L’object può essere utilizzato per la navigazione Ajax:

 window.history.pushState({ id: 35 }, 'Viewing item #35', '/item/35'); window.onpopstate = function (e) { var id = e.state.id; load_item(id); }; 

Leggi di più qui: http://www.w3.org/TR/html5-author/history.html

Una soluzione di fallback: https://github.com/browserstate/history.js

Per aggiungere a ciò che i ragazzi hanno già detto, modifica la proprietà window.location.hash in modo che corrisponda all’URL che desideri nella funzione onclick.

 window.location.hash = 'category-name'; // address bar would become http://example.com/#category-name 

Credo che manipolare direttamente la barra degli indirizzi su un URL completamente diverso senza passare a quell’URL non sia consentito per motivi di sicurezza, se si è soddisfatti

http://www.mysite.com/products/#{selectedCat}

vale a dire un collegamento di stile di ancoraggio all’interno della stessa pagina, quindi esaminare i vari script cronologia / “pulsante indietro” che sono ora presenti nella maggior parte delle librerie javascript.

La menzione del pannello di aggiornamento mi porta a indovinare che stai usando asp.net, in tal caso il controllo della cronologia ajax di asp.net è un buon punto di partenza

Non penso che sia ansible (almeno cambiare a un indirizzo completamente diverso), in quanto sarebbe un uso non intuitivo della barra degli indirizzi e potrebbe promuovere attacchi di phishing.

Questo non può essere fatto nel modo in cui lo stai dicendo. Il metodo suggerito da somej.net è il più vicino che puoi ottenere. In realtà è pratica molto comune nell’età AJAX. Anche Gmail lo usa.

“Window.location.hash”

come suggerito da sanchothefat dovrebbe essere l’unico modo per farlo. Perché tutti i luoghi in cui ho visto questa funzione, è tutto il tempo dopo il # in URL.