Ajax back button and bookmarks.

Da tempo cercavo una soluzione al noto problema del salvataggio della cronologia nello sviluppo di applicazioni web interamente realizzate in Ajax: infatti con questa tecnologia viene compromesso il corretto funzionamento del tasto "back" del browser e non è possibile salvare gli url delle varie pagine web. Fortunatamente in rete numerosi programmatori hanno provveduto ad ovviare al problema: in realtà, nessuna delle soluzioni trovate mi ha soddisfatto pienamente, vuoi per la difficoltà di implementazione, vuoi per la non perfetta resa cross-browser.

Simon Martin (Netatoo Studio) ha scritto una  libreria basata su prototype che permette di risolvere agevolmente questi problemi: PrototypeXtensions. A me è piaciuta veramente tanto, l'ho utilizzata nell'ultimo lavoro e sto realizzandoci anche un nuovo progetto personale.

Questo script, oltre a permettere di gestire correttamente la cronologia e il tasto "indietro" (history), presenta numerose altre features, Class.accessors ed EventManager, che offrono la possibilità di gestire facilmente le opzioni di una classe e di creare eventi personalizzati, Cookie e Number per manipolare rispettivamente cookie e il calcolo del tempo. Inoltre lo script prevede di poter gestire con estrema semplicità lo sniffing del browser utilizzato dagli utenti e un plugin per la creazione unobtrusiva di un menu a tab, con numerose opzioni e che ben si integra  con History.

History

History è basata sugli Hash di Prototype e consente di definire variabili in modo dinamico nell'hash dell'url. Per assicurare la compatibilità con IE 6/7 inserisce attraverso il DOM un iframe nascosto. A proposito di compatibilità cross-browser, insieme al già citato Explorer si aggiungono tutti i browser moderni (Firefox, Opera, Google Chrome, e anche Safari!)

History dispone di tre semplici metodi: History.set(), History.get(), History.unset()

Ajax.History

PrototypeXtensions introduce due nuovi strumenti Ajax che possono essere utilizzati in luogo dei classici di prototype (ajax.Request e ajax.Updater), per inviare dati al server o aggiornare frammenti di una pagina: si tratta di Ajax.History.Request e Ajax.History.Updater in cui è appunto implementata Ajax.History.

Ajax.History dispone  di tre parametri più un callback:

  • history.id: parametro identificativo aggiunto nell'url della pagina, opzionale in AjaxHistory.Updater (in caso di assenza viene utilizzato l'id dell'elemento che viene aggiornato con la chiamata Ajax)
  • state: stato di History.id (opzionale),viene aggiunto nell'url.
  • history.cache: se settata a true le chiamate Ajax saranno simulate da una chiamata precedente, con conseguente diminuzione dei tempi di caricamento, fantastico!
  • history.onStateChange: permette di definire delle funzioni di callback avviate quando avviene un cambiamento nello stato della cronologia.

Vi segnalo anche questo link dove si trova uno script esemplificativo di Ajax.history che mi è stato inviato dall'autore della libreria, molto disponibile a fornire ulteriori spiegazioni alla pur completa documentazione.

  • Social:
  • delicious
  • digg
  • diggita
  • facebook
  • google
  • reddit
  • segnalo
  • technorati
  • technotizie
  • twitter
  • yahoo
  • wikio

Commenti

1) 16 ottobre 2008 - inserito da AndDM

hi, post molto interessante, sto sperimantando la libreria unita ad swfaddress, uso il prototype per richiamare alcune pagine in post e tutto va bene ma non aggiorna la history, ho provato allora ad usare l'estensione con il seguente codice: var params = Form.serialize($('content')); var myAjax = new Ajax.History.Updater('content', "gestionePOST.php", {asynchronous:true, parameters:params, history : {id : 'ricerca', cache : true}}); return; risultato รจ che nella consolle degli errori mi dice che non trova la funzione Ajax.History. Ho incluso nella mia pagina sia il js del prototype che questa estensione ma niente. Hai qualche suggerimento a riguardo??
Inserisci un commento
codice di sicurezza

(*) Campi obbligatori

L'html nel testo del commento è abilitato: i tag consentiti sono: a, em, strong, p, code, pre, quote e br.

Gli attributi dei tag utilizzabili sono title e href.

follow me on Twitter