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
Gestione dell'annidamento delle regole dei layer in CSS
Gestire progetti .NET + React in .NET Aspire
Selettore CSS :has() e i suoi casi d'uso avanzati
Configurare e gestire sidecar container in Azure App Service
Utilizzare Hybrid Cache in .NET 9
Creare una libreria CSS universale - Rotazione degli elementi
Escludere alcuni file da GitHub Secret Scanning
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Scrivere selettori CSS più semplici ed efficienti con :is()
Utilizzare WhenEach per processare i risultati di una lista di task
Montare Azure Blob Storage su Linux con BlobFuse2
Eseguire query in contemporanea con EF
I più letti di oggi
- disponibile il nuovo #adsdk per #win8. doc su https://aspit.co/ad3 donwload diretto da https://aspit.co/ad4
- Niente .NET sui server: siamo Microsoft
- Develop and distribute Azure Functions using K8s and CI/CD
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- Impersonation di utente per l'esecuzione di codice in una pagina ASP.NET
- Solo 5 minuti all'inizio della keynote!! http://aspitalia.com/build-win8 #BldWin
- #MIX10: Windows Phone - demo Hush Hush, un diario con interfaccia completamente personalizzata