Ho cercato sul Web questa domanda ma non ho trovato nulla:
Qual è la logica del pulsante Indietro? Cosa succede quando premiamo il pulsante Indietro su un browser Web?
Mi piacerebbe davvero saperne di più su questo.
Grazie.
Ho cercato sul Web questa domanda ma non ho trovato nulla:
Qual è la logica del pulsante Indietro? Cosa succede quando premiamo il pulsante Indietro su un browser Web?
Mi piacerebbe davvero saperne di più su questo.
Grazie.
Risposte:
Il tuo browser web mantiene una pila (o un elenco, se vuoi) delle pagine web che hai visitato in quella finestra. Supponiamo che la tua home page sia google.com e da lì visiti alcuni altri siti web: youtube.com, yahoo.com e cnn.com. Dopo aver visitato l'ultimo, l'elenco appare così:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
Quando premi il pulsante Indietro, il browser ti riporta alla pagina precedente nell'elenco, in questo modo:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
A questo punto puoi premere di nuovo Indietro per portarti su youtube.com, oppure puoi premere Avanti per rimetterti su cnn.com. Supponiamo che tu prema Indietro una seconda volta:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
Se ora vai su, ad esempio, abc.com, l'elenco cambia in questo modo:
google.com -> youtube.com -> abc.com
^
|
current page
Nota che sia yahoo.com che cnn.com sono stati eliminati dall'elenco. Questo perché hai preso una nuova strada. Il browser mantiene solo un elenco delle pagine che hai visitato per arrivare dove sei ora, non una cronologia di ogni pagina in cui sei mai stato. Inoltre il browser non sa nulla della struttura del sito che stai visitando, il che può portare a comportamenti sorprendenti.
Sei su un sito di shopping (ne.com, come un breve esempio) che ha categorie e sottocategorie di prodotti da sfogliare. Il progettista del sito ha attentamente fornito breadcrumb nella parte superiore della finestra per consentirti di navigare tra le categorie. Si inizia dalla pagina principale del sito, si fa clic su Hardware, quindi su Memoria. L'elenco ora ha questo aspetto:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem
^
|
current page
Vuoi tornare alla categoria Hardware, quindi usa i breadcrumb per salire alla categoria genitore invece di usare il pulsante Indietro. Ora l'elenco dei browser ha questo aspetto:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
^
|
current page
Secondo la struttura del sito, sei andato indietro (su di un livello), ma al browser sei andato avanti perché hai cliccato su un collegamento. Ogni volta che fai clic su un link o digiti un URL nella barra degli indirizzi, stai andando avanti per quanto riguarda il browser, indipendentemente dal fatto che quel link ti porti o meno a una pagina che hai già visitato.
Infine, vuoi tornare alla pagina principale del sito (ne.com). Potresti usare i breadcrumb, ma questa volta fai clic sul pulsante Indietro: sembra ovvio che dovrebbe portarti a un livello superiore, giusto? Ma dove ti porta?
Inizialmente è fonte di confusione per molti utenti (me compreso, quando mi capita di fare esattamente questo) che ti porti "giù" di un livello, tornando alla categoria Memoria. Guardando l'elenco delle pagine, è facile capire perché:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
^
|
current page
Per tornare alla pagina principale utilizzando solo il pulsante Indietro sarebbero necessarie altre due pressioni, riportandoti "indietro" alla categoria Hardware e infine alla pagina principale. Sembra così ovvio a noi programmatori cosa sta succedendo, ma sorprende continuamente gli utenti regolari perché non si rendono conto che il browser non sa nulla della struttura gerarchica di qualunque sito web si trovi.
Sarebbe fantastico se i browser permettessero ai progettisti di siti di programmare il pulsante Indietro per fare la cosa ovvia (portarti a un livello superiore) piuttosto che quello che fa ora?
Modifica: un commentatore ha chiesto se il browser ricarica la pagina o semplicemente la visualizza dalla sua cache locale.
La risposta è, dipende. I progettisti del sito possono specificare se il browser deve memorizzare nella cache la pagina o meno. Per le pagine impostate come non memorizzate nella cache, il browser ricarica la pagina dal server quando si preme Indietro, come se fosse la prima volta che la si visita. Per le pagine memorizzate nella cache, il browser lo visualizza fuori dalla cache, il che è molto più veloce.
Mi piace pensare che sia una riemissione della mia ultima richiesta. Se hai eseguito un semplice GET, probabilmente restituirà la stessa cosa dell'ultima volta (meno il contenuto dinamico). Se hai eseguito un POST, invierai nuovamente il modulo (dopo la conferma) al server.
L'idea di base è tornare all'ultima pagina o divisione logica del sito.
Guardando Gmail vedrai se esegui una ricerca e fai clic su un messaggio, quindi premi il pulsante Indietro ti riporterà alla ricerca che hai fatto.
Quando fai clic su di esso nella maggior parte dei browser, invierà nuovamente l'ultima richiesta http o caricherà una cache se il browser memorizza nella cache i siti.
Penso che il modo più semplice per spiegare questo sia in pseudocodice:
class Page:
String url, ...
Page previous, next # implements a doubly-linked list
class History:
Page current # current page
void back():
if current.previous == null:
return
current = current.previous
refresh()
void forward():
if current.next == null:
return
current = current.next
refresh()
void loadPage(Page newPage):
newPage.previous = current
current.next = newPage # remove all the future pages
current = current.next
display(current)
In qualità di devoloper, dovresti assicurarti che la tua webapp funzioni indipendentemente da come il browser gestisce il pulsante Indietro :-) Rispedisce la richiesta? La nuova richiesta è identica alla vecchia o differisce in qualche modo? Il browser chiederà all'utente di confermare il nuovo POST? Quali elementi della pagina verranno nuovamente richiesti e quali caricati dalla cache? Il browser rispetterà le mie intestazioni di controllo della cache?
Le risposte a queste domande dipendono dalla marca, dalla versione di un browser e dalle impostazioni dell'utente. Progetta il tuo software in modo che tutto questo non importi più di tanto.
Ci scusiamo per la risposta non molto diretta, ma ci sono già alcune risposte dirette qui.
un browser ha sempre memorizzato le pagine per la sua memorizzazione e quando premiamo il pulsante indietro non invia la richiesta al server per la pagina precedente invece vede solo la sua cache dove ha memorizzato le pagine e segue la regola LIFO per questo motivo dacci quella pagina prima premendo il pulsante indietro che abbiamo aperto nell'ultimo
Il browser carica l'ultima pagina visualizzata prima di quella corrente, quindi segue eventuali reindirizzamenti che potrebbero verificarsi?
Mi sembra di perdere il punto della domanda.