JavaScript tabanlı uygulamalarla ilgili önemli bir sorun, Geri düğmesini kırmalarıdır. Sayfadaki içeriği sunucudan yeni bir sayfa yüklemek yerine JavaScript ile güncellerseniz tarayıcı geçmişinde hiçbir giriş yapılmaz; Böylece kullanıcı Geri'yi tıklayıp önceki durumuna geri dönmeyi beklerken, bunun yerine önceki sitede yer alır.
Sürükle ve bırak, kullanıcıların web uygulamalarınızla etkileşimde bulunabilmeleri için harika bir yoldur. Ancak, uygulamalarınızda zaman geçirdikten sonra, kullanıcılar bir sayfaya geri dönmeyi bekleyen Geri düğmesini ve bunun yerine Başlangıç ekranlarına geri dönmeleri durumunda kullanılabilirlik kazançları kaybedilecektir. Bu yazıda “Merhaba! HTML5 & CSS3 ”yazarı Rob Crowther, bu kaderden kaçınmak için HTML5 geçmiş API'sini nasıl kullanacağınızı gösterir.
Sorun basitçe gösterilebilir. İhtiyacınız olan tek şey, kullanıcı etkinliğine yanıt olarak sayfayı güncelleyen bir işlevdir:
var times = 0;function doclick() {times++;document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
ve küçük bir işaretleme:
Click MeRecorded 0 clicks
Gerçek hayatta, web sayfanız AJAX aracılığıyla sunucudan yeni içerik almak gibi daha karmaşık bir şey yapıyor olabilir, ancak basit bir güncelleme konsepti göstermek için yeterlidir. Kullanıcı sayfayı ziyaret ettiğinde neler olacağını görelim.
Doclick () işlevi geçmiş API'den yararlanmak için güncellenebilir. Sayfa her güncellendiğinde, konumu da ayarlayacaktır.
function doclick() {times++;location.hash = times;document.getElementById('message').innerHTML ='Recorded ' + times + ' clicks';}
Tarihin güncellenmesi sorunun sadece bir kısmıdır; Ayrıca, sayfanın durumunu tarihe göre eşleştirmek için de güncelleyebilmeniz gerekir.
Tarihi yöneten kişi olduğunuz için sayfa durumunu yönetmeniz size kalmıştır. Sayfanızı location.hash'a yanıt olarak güncellemek için, hashchange olayını dinleyebilirsiniz:
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';}
Doclick () işlevi artık sadece zaman değişkenini güncellemekten ve karma değiştirmekten sorumludur. Karma değişimi olayı pencere nesnesi üzerindedir; Ne zaman gerçekleşirse, hashın var olduğunu kontrol edersiniz. Gerçek bir uygulamada, bunun geçerli bir değere sahip olduğunu da kontrol etmek istersiniz. Ardından, karma değerindeki sayıların zaman değerini ayarlarsınız. Son olarak, belgeyi doğru sayfa durumunu yansıtacak şekilde güncelleştirin. Şimdi bu yeni koda bakalım:
Uygulamanızın belirli görünümlerini etiketlemek ve kullanıcının aralarında gezinmesine izin vermek istiyorsanız, location.hash özelliği ve ilişkili hashchange olayı yararlıdır. Google Mail, gelen kutunuz (#inbox), rehber (#contacts) ve diğer görünümler arasında gezinmenizi sağlayarak bu yaklaşımı kullanır. Gmail hesabınız varsa, farklı sayfalarda gezinirken URL'ye ne olduğuna bakın ve sonra geri tıkla.
Ancak, durum bilgisi devam ettiği sürece, karma yalnızca bir dizeyi saklamanıza izin verir. Daha karmaşık bir nesneyi kodlayabilirsiniz, ancak URL hızla uzun ve hantal hale gelir ve kullanıcılarınız için unutulmaz olmazdı. Tarihin bir parçası olarak depolanan daha karmaşık bilgilere ihtiyacınız varsa, daha iyi bir yaklaşım, hashın bir mağazadan daha fazla durum bilgisi almak için bir anahtar olarak kullanılması olacaktır. Buna kendi yaklaşımınızı katlayabilmenize rağmen, HTML5, sizin için history.pushState () yöntemi ve popstate olayı aracılığıyla sizin için bir API sağladı. Bu yöntemler karmaşık bir nesneyi kaydetmenizi ve yeniden yüklemenizi sağlar.
Tarayıcının geçmişini yönetmenin, uygulamanızın bağlamında Geri düğmesinin daha hassas bir şekilde hareket etmesini sağladığını öğrendiniz. Ayrıca, mikro veri API'sı sayfa içeriklerindeki yapısal semantik bilgilere erişmenizi sağlar.
Bu teknik için hangi yöntemleri kullanıyorsunuz? Farklı bir yöntem geliştirdiniz mi? Yorumlarda bize bildirin.
Öne çıkan görsel / küçük resim, resme geri dön Shutterstock üzerinden.