Een groot probleem met op JavaScript gebaseerde applicaties is dat ze de knop Terugbreken. Als u inhoud op de pagina bijwerkt met JavaScript in plaats van een nieuwe pagina van de server te laden, staat er geen vermelding in de browsergeschiedenis; dus wanneer de gebruiker op Back klikt, in de verwachting dat hij terug zal gaan naar de vorige status, komen deze in plaats daarvan op de vorige site terecht.
Slepen en neerzetten is een geweldige manier voor gebruikers om te communiceren met uw webtoepassingen. Maar de winst voor bruikbaarheid zal verloren gaan als gebruikers, na tijd te hebben besteed aan het verplaatsen van uw applicatie, op de knop Terug klikken, in de verwachting een pagina terug te gaan en in plaats daarvan terug te keren naar hun startscherm. In dit artikel "Hallo! HTML5 & CSS3 "auteur Rob Crowther laat je zien hoe je de HTML5 history API gebruikt om dat lot te vermijden.
Het probleem kan eenvoudig worden aangetoond. Het enige wat u nodig hebt, is een functie die de pagina bijwerkt als reactie op gebruikersactiviteit:
var times = 0;function doclick() {times++;document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
en een kleine opmaak:
Click MeRecorded 0 clicks
In het echte leven zou uw webpagina iets ingewikkelder doen, zoals het ophalen van nieuwe inhoud van de server via AJAX, maar een eenvoudige update is voldoende om het concept te demonstreren. Laten we eens kijken wat er gebeurt als de gebruiker de pagina bezoekt.
De doclick () -functie kan worden bijgewerkt om te profiteren van de geschiedenis-API. Telkens wanneer de pagina wordt bijgewerkt, wordt ook de locatie.hash ingesteld:
function doclick() {times++;location.hash = times;document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
Het bijwerken van de geschiedenis is slechts een deel van het probleem; u moet ook de status van de pagina kunnen bijwerken om overeen te komen met de staat in de geschiedenis.
Omdat jij degene bent die de geschiedenis beheert, is het aan jou om de paginastatus te beheren. Om uw pagina bij te werken naar aanleiding van de wijziging van location.hash, kunt u naar de hashchange-gebeurtenis luisteren:
function doclick() {times++;location.hash = times;}window.onhashchange = function() {if (location.hash.length > 0) {times = parseInt(location.hash.replace('#',''),10);} else {times = 0;}document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
De functie doclick () is nu alleen verantwoordelijk voor het bijwerken van de variabele times en het wijzigen van de hash. De hashchange-gebeurtenis bevindt zich in het vensterobject; wanneer het plaatsvindt, controleer je of de hash bestaat. In een echte applicatie zou je ook willen controleren of het een geldige waarde had. Vervolgens stelt u de waarde van tijden in als het aantal in de hash. Ten slotte werkt u het document bij om de juiste paginastatus weer te geven. Laten we naar deze nieuwe code kijken:
De eigenschap location.hash en de bijbehorende hashchange -gebeurtenis zijn handig als u bepaalde weergaven van uw toepassing wilt coderen en de gebruiker de mogelijkheid wilt geven er tussen te navigeren. Google Mail gebruikt deze aanpak door u toe te staan te navigeren tussen uw inbox (#inbox), contacten (#contacten) en andere weergaven. Als u een Gmail-account hebt, bekijkt u wat er met de URL gebeurt terwijl u naar verschillende pagina's navigeert en klik dan terug.
Maar voor zover informatie over de status gaat, laat de hash je alleen een string opslaan. Je zou een complexer object kunnen coderen, maar de URL zou snel lang en onpraktisch worden en zou niet voor je gebruikers gedenkwaardig zijn. Als u meer complexe informatie nodig hebt die is opgeslagen als onderdeel van de geschiedenis, is een betere methode om de hash te gebruiken als sleutel om verdere statusinformatie uit een winkel te halen. Hoewel u hier uw eigen benadering naartoe kunt rollen, heeft HTML5 een API geleverd om dit voor u te doen via de methode history.pushState () en de popstate-gebeurtenis. Met deze methoden kunt u een complex object opslaan en opnieuw laden.
U hebt geleerd dat wanneer u de geschiedenis van de browser beheert, u de knop Terug op een meer verstandige manier kunt laten werken in de context van uw toepassing, terwijl de API voor microdata u toegang geeft tot gestructureerde semantische informatie op de pagina-inhoud.
Welke toepassingen voorziet u voor deze techniek? Heb je een andere methode ontwikkeld? Laat het ons weten in de comments.
Uitgelichte afbeelding / thumbnail, ga terug beeld via Shutterstock.