Jedním z hlavních problémů s aplikacemi založenými na jazyce JavaScript je to, že přeruší tlačítko Zpět. Pokud aktualizujete obsah na stránce pomocí JavaScriptu, spíše než načítat novou stránku ze serveru, v historii prohlížeče se nezobrazuje žádný záznam; takže když uživatel klepne Back, očekává, že se vrátí zpět do předchozího stavu, místo toho skončí na předchozí stránce.
Drag and drop je skvělý způsob, jak mohou uživatelé komunikovat s vašimi webovými aplikacemi. Avšak zisky použitelnosti se ztratí, pokud po uplynutí času, který se pohybuje v aplikaci, uživatelé kliknou na tlačítko Zpět a očekávají, že se vrátí na stránku a místo toho se vrátí na svou domovskou obrazovku. V tomto článku "Dobrý den! HTML5 & CSS3 "autor Rob Crowther vám ukáže, jak používat historii API HTML5, abyste se tomuto osudu vyhnuli.
Problém lze prokázat jednoduše. Vše, co potřebujete, je funkce, která aktualizuje stránku v reakci na aktivitu uživatele:
var times = 0;function doclick() {times++;document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
a malá značka:
Click MeRecorded 0 clicks
V reálném životě by vaše webová stránka měla dělat něco komplikovanějšího, jako je získávání nového obsahu ze serveru přes AJAX, ale jednoduchá aktualizace stačí k prokázání konceptu. Uvidíme, co se stane, když uživatel navštíví stránku.
Funkci doclick () můžete aktualizovat, abyste využili historii rozhraní API. Pokaždé, když je stránka aktualizována, nastaví také location.hash:
function doclick() {times++;location.hash = times;document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
Aktualizace historie je pouze součástí problému; musíte také mít možnost aktualizovat stav stránky tak, aby odpovídal stavu v historii.
Protože vy spravujete historii, je na vás, abyste spravovali stav stránky. Chcete-li aktualizovat svou stránku v reakci na změnu location.hash, můžete poslouchat událost hashchange:
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';}
Funkce doclick () je nyní zodpovědná pouze za aktualizaci proměnné časů a změnu hash. Hromadná událost je na objektu okna; pokud k tomu dojde, zkontrolujte, zda existuje hash. V reálné aplikaci byste také chtěli zkontrolovat, zda má platnou hodnotu. Dále nastavíte hodnotu časů jako číslo v hash. Nakonec aktualizujete dokument tak, aby odrážel správný stav stránky. Podívejme se na tento nový kód:
Vlastnost location.hash a přidružená událost hashchange jsou užitečné, pokud chcete označit konkrétní pohledy vaší aplikace a umožnit uživateli navigaci mezi nimi. Služba Google Mail používá tento přístup tím, že umožňuje navigaci mezi doručenou poštu (#inbox), kontakty (# kontaky) a další pohledy - máte-li účet Gmail, podívejte se, co se děje s adresou URL při procházení na různé stránky a pak klikněte zpět.
Ale pokud jde o informace o stavu, hash umožňuje pouze uložit řetězec. Mohli byste zakódovat složitější objekt, ale URL by se rychle stalo dlouhým a nepraktickým a nebude pro vaše uživatele zapamatovatelné. Pokud potřebujete složitější informace uložené jako součást historie, lepší přístup by bylo použití šachu jako klíče pro vytažení dalších informací o stavu z nějakého úložiště. Ačkoli byste se k tomu mohli vrátit, HTML5 poskytl API, který to pro vás provede metodou history.pushState () a popstate událostí. Tyto metody umožňují uložit a znovu načíst složitý objekt.
Naučili jste se, že správa historie prohlížeče umožňuje, aby se tlačítko Back choval mnohem rozumněji v kontextu vaší aplikace, zatímco API pro mikrodata poskytuje přístup k strukturovaným sémantickým informacím v obsahu stránky.
Co používáte pro tuto techniku? Vyvinuli jste jinou metodu? Dejte nám vědět v komentářích.