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
Migliorare la sicurezza dei prompt con Azure AI Studio
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Gestire domini wildcard in Azure Container Apps
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Estrarre dati randomici da una lista di oggetti in C#
Change tracking e composition in Entity Framework
Paginare i risultati con QuickGrid in Blazor
Potenziare Azure AI Search con la ricerca vettoriale
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Migliorare l'organizzazione delle risorse con Azure Policy
I più letti di oggi
- Effettuare il download di un file via FTP con la libreria FluentFTP di .NET
- Debug di app .NET tramite snapshot con Application Insight
- Utilizzare le Fullscreen API di HTML5 in IE11
- Proteggere l'accesso ad una Azure Web e API App tramite Google
- Utilizzare .NET Core con le Azure Function
- Effettuare il redirect da HTTP a HTTPS con la Azure CDN
- Creare un package MTS con uno script ASP
- Autenticazione con Minimal API di ASP.NET Core 6
- Routing HTTP con i proxy delle Azure Function
- Convidere una share di rete tra VM di Azure