Jednym z głównych problemów z aplikacjami opartymi na JavaScript jest to, że przerywają przycisk Wstecz. Jeśli zaktualizujesz treść na stronie za pomocą JavaScript, zamiast ładowania nowej strony z serwera, wpis nie zostanie zapisany w historii przeglądarki; więc gdy użytkownik kliknie przycisk Wstecz, oczekując powrotu do poprzedniego stanu, zamiast tego trafi na poprzednią stronę.
Przeciąganie i upuszczanie to świetny sposób na interakcję użytkowników z aplikacjami internetowymi. Jednak zyski z użyteczności zostaną utracone, jeśli po spędzeniu czasu w aplikacji użytkownik kliknie przycisk Wstecz, oczekując powrotu do strony i powrotu do ekranu początkowego. W tym artykule "Hello! HTML5 i CSS3 "autor Rob Crowther pokazuje, jak używać interfejsu API historii HTML5, aby uniknąć tego losu.
Problem można łatwo wykazać. Potrzebujesz tylko funkcji, która aktualizuje stronę w odpowiedzi na aktywność użytkownika:
var times = 0;function doclick() {times++;document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
i trochę znaczników:
Click MeRecorded 0 clicks
W rzeczywistości twoja strona robiłaby coś bardziej skomplikowanego, na przykład pobieranie nowej treści z serwera za pośrednictwem AJAX, ale prosta aktualizacja wystarczy, by zademonstrować tę koncepcję. Zobaczmy, co się stanie, gdy użytkownik wejdzie na stronę.
Funkcja doclick () może zostać zaktualizowana, aby skorzystać z interfejsu API historii. Za każdym razem, gdy strona jest aktualizowana, ustawi także location.hash:
function doclick() {times++;location.hash = times;document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
Aktualizacja historii jest tylko częścią problemu; musisz również móc zaktualizować stan strony, aby pasował do stanu w historii.
Ponieważ to Ty zarządzasz historią, to Ty zarządzasz jej stanem. Aby zaktualizować stronę w odpowiedzi na zmianę location.hash, możesz wysłuchać zdarzenia 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';}
Funkcja doclick () jest teraz odpowiedzialna tylko za aktualizację zmiennej time i zmianę hasza. Zdarzenie hashchange znajduje się na obiekcie okna; kiedy to nastąpi, sprawdzasz, czy hash istnieje. W prawdziwej aplikacji chcesz również sprawdzić, czy ma poprawną wartość. Następnie ustaw wartość razy, aby była liczbą w haszdzie. Na koniec aktualizujesz dokument, aby odzwierciedlić poprawny stan strony. Spójrzmy na ten nowy kod:
Właściwość location.hash i skojarzone zdarzenie wymiany są przydatne, jeśli chcesz oznaczyć konkretne widoki aplikacji i zezwolić użytkownikowi na nawigację między nimi. Google Mail korzysta z tego podejścia, umożliwiając nawigację między skrzynką odbiorczą (#inbox), kontaktami (# kontakty) i innymi widokami - jeśli masz konto Gmail, spójrz na to, co stanie się z adresem URL podczas nawigowania po różnych stronach i następnie kliknij z powrotem.
Ale jeśli chodzi o informacje o stanie, hash pozwala tylko przechowywać ciąg znaków. Można zakodować obiekt bardziej złożony, ale URL szybko stałby się długi i nieporęczny i nie byłby niezapomniany dla użytkowników. Jeśli potrzebujesz bardziej złożonych informacji przechowywanych w ramach historii, lepszym rozwiązaniem byłoby użycie skrótu jako klucza do wyciągnięcia dalszych informacji o stanie z jakiegoś sklepu. Chociaż możesz zastosować własne podejście, HTML5 dostarczył API, aby zrobić to za pomocą metody history.pushState () i zdarzenia popstate. Te metody umożliwiają zapisanie i ponowne załadowanie złożonego obiektu.
Dowiedziałeś się, że zarządzanie historią przeglądarki pozwala na zachowanie przycisku Wstecz w bardziej rozsądny sposób w kontekście aplikacji, a interfejs API mikrodanych zapewnia dostęp do uporządkowanych informacji semantycznych w treści strony.
Jakie zastosowania przewiduje ta technika? Czy opracowałeś inną metodę? Daj nam znać w komentarzach.
Wyróżniony obraz / miniatura, wrócić do obrazu przez Shutterstock.