La History API di HTML5 consente di avere un maggior controllo della navigazione, questo vantaggio è indispensabile in scenari in cui i contenuti sono renderizzati dinamicamente nella pagina.
Se l'utente clicca sul tasto "indietro" del browser, si aspetterà di vedere lo "stato" precedente della pagina anzichè la pagina/url di provenienza. E' opportuno quindi intervenire manipolando la sessione di navigazione, mediante l'oggetto history con cui è possibile:
- pilotare il browser con i metodi back, forward e go
- manipolare la sessione di navigazione con il metodo pushState
- sottoscrivere gli eventi inerenti la navigazione, ad esempio onpopstate
Nell'esempio seguente, viene dimostrato come manipolare la sessione di navigazione, gestendo l'evento onpopstate (tasto "indietro" del browser), inserendo con pushstate url "fittizi", che saranno visibili nella barra degli indirizzi e fornendo infine un titolo contestuale ai contenuti renderizzati dinamicamente nella pagina:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <title>HTML5 history api</title> </head> <body> <h1>History API</h1> abilita gestione history<input id="historyEnabled" type="checkbox"/> <dl> <dd><a id="link1" href="#" data-brand="Aston-Martin">Aston Martin</a></dd> <dd><a href="#" data-brand="Bentley">Bentley</a></dd> <dd><a href="#" data-brand="Ferrari">Ferrari</a></dd> <dd><a href="#" data-brand="Infinity">Infinity</a></dd> <dd><a href="#" data-brand="Maserati">Maserati</a></dd> <dd><a href="#" data-brand="Lamborghini">Lamborghini</a></dd> <dd><a href="#" data-brand="Lotus">Lotus</a></dd> <dd><a href="#" data-brand="Pagani">Pagani</a></dd> <dd><a href="#" data-brand="Porsche">Porsche</a></dd> </dl> <h3>sei nel brand: <i><label id="lblbrand"></i></label></h3> </body> </html>
function showCars(brand){ //Simuliamo il popolamento dinamico di un template document.querySelector("#lblbrand").innerHTML=brand; } function manageClick(lnk) { //salvo il brand visitato var brand = lnk.dataset.brand; if(document.querySelector("#historyEnabled").checked) history.pushState(lnk.dataset.brand, "Modelli " + brand + " 2012", "/2012/brands/" + brand); showCars(lnk.dataset.brand); } window.onload= function(){ //gestione evento click var links = document.querySelectorAll("a"); for (var i = 0; i < links.length; i++) { links<i>.addEventListener("click", function (event){ manageClick(this); event.preventDefault();}, false); onpopstate = function(event){ if(event.state !== null) showCars(event.state);} };
La specifica completa è disponibile qui: http://www.w3.org/TR/html5/history.html
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Anonimizzare i dati sensibili nei log di Azure Front Door
Supportare la crittografia di ASP.NET Core con Azure Container App
Ottenere un token di accesso per una GitHub App
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Utilizzare i variable font nel CSS
Evitare memory leaks nelle closure JavaScript
Gestione ciclo di vita in .NET Aspire
Configurare lo startup di applicazioni server e client con .NET Aspire
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Gestire gli errori nelle Promise JavaScript con try()
I più letti di oggi
- Analizzare il contenuto di una issue con GitHub Models e AI
- .NET Conference Italia 2025 - Milano
- Integrazione di Copilot in .NET Aspire
- Integrare OpenAI tramite Aspire
- The Agentic Day - Milano
- Utilizzare il browser per rilevare Javascript e CSS non utilizzati nel codice
- Ottimizzare il codice JavaScript utilizzando WeakMap e WeakSet