Domanda

ho cercato nel web a questa domanda, ma non ho trovato nulla:

Qual è la logica del pulsante indietro? Quello che sta accadendo quando ci ha colpito il pulsante indietro su un browser Web?

Mi piacerebbe davvero capire di più su questo.

Grazie.

È stato utile?

Soluzione

Il browser Web conserva una pila (o una lista, se si vuole) delle pagine web che avete visitato in quella finestra. Diciamo che la vostra home page è google.com e da lì si visita un paio di altri siti web: youtube.com, yahoo.com, e CNN.com. Visitando l'ultimo, la lista si presenta così:

google.com -> youtube.com -> yahoo.com -> cnn.com
                                            ^
                                            |
                                       current page

Quando si preme il pulsante Indietro, il browser si torna alla pagina precedente nella lista, in questo modo:

google.com -> youtube.com -> yahoo.com -> cnn.com
                                ^
                                |
                           current page

A questo punto è possibile premere Torna di nuovo a prendere a youtube.com, oppure è possibile premere in avanti per mettere a cnn.com di nuovo. Diciamo che si preme una seconda volta:

google.com -> youtube.com -> yahoo.com -> cnn.com
                   ^
                   |
              current page

Se ora si va a, diciamo, abc.com, i cambiamenti della lista a guardare in questo modo:

google.com -> youtube.com -> abc.com
                               ^
                               |
                          current page

Si noti che sia yahoo.com e cnn.com sono scomparsi dalla lista. Questo perché si ha un nuovo percorso. Il browser conserva solo un elenco delle pagine visitate per arrivare a dove sei ora, non una storia di ogni pagina che avete mai visto. Il browser, inoltre, non sa nulla circa la struttura del sito che stai visitando, che può portare a un comportamento sorprendente.

Sei su un sito di shopping (ne.com, come un breve esempio) che dispone di categorie e sottocategorie di prodotti da sfogliare. Il sito stilista ha pensato di realizzare pangrattato vicino alla parte superiore della finestra per consentire per navigare tra le categorie. Si inizia in cima alla pagina del sito, cliccare su Hardware, quindi Memoria. La lista ora si presenta così:

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem
                                           ^
                                           |
                                      current page

Si vuole tornare alla categoria Hardware, in modo da utilizzare il pangrattato per salire alla categoria superiore invece di utilizzare il pulsante Indietro. Ora la lista del browser appare così:

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
                                                          ^
                                                          |
                                                     current page

Secondo la struttura del sito, si è andato a ritroso (di un livello), ma per il browser si è andato avanti, perché si è fatto clic su un link. Ogni volta che si fa clic su un link o digitare un URL nella barra degli indirizzi, si sta andando avanti per quanto riguarda il browser è interessato, anche se non quel link porta a una pagina che avete già visto.

Infine, si vuole tornare alla pagina principale del sito (ne.com). È possibile utilizzare il pangrattato, ma questa volta si fa clic sul pulsante Indietro - sembra ovvio che si dovrebbe prendere su di un livello, giusto? Ma dove ci vuole te?

E 'inizialmente di confusione per molti utenti (me compreso, quando mi capita di fare esattamente questo) che ti porta "verso il basso" livello, torna alla categoria di memoria. Guardando la lista 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 richiederebbe altre due presse, che vi porterà "back" per la categoria Hardware e infine alla pagina principale. Sembra così evidente a noi programmatori che cosa sta succedendo, ma sorprende il check out per gli utenti regolari per tutto il tempo, perché non si rendono conto che il browser non sa nulla circa la struttura gerarchica di qualsiasi sito web che capita di essere su.

sarebbe bello se i browser avrebbero permesso ai progettisti sito del programma il tasto Back per fare la cosa più ovvia (porterà su un livello), piuttosto che qualunque cosa faccia ora?

Edit: Un commentatore ha chiesto se il browser ricarica la pagina o semplicemente mostra fuori della sua cache locale

.

La risposta è che dipende. progettisti di siti possono specificare se il browser deve memorizzare nella cache della pagina oppure no. Per le pagine che sono impostati come non-memorizzato nella cache, il browser ricarica la pagina dal server quando si preme Indietro, come se fosse la prima volta che si sta visitando esso. Per le pagine nella cache, il browser visualizza fuori della cache, che è molto più veloce.

Altri suggerimenti

Mi piace pensare ad esso come ri-emissione la mia ultima richiesta. Se è stata eseguita una semplice GET, sarebbe probabilmente restituire la stessa cosa ha fatto l'ultima volta (meno contenuti dinamici). Se tu avessi fatto un post, si sta andando a ripresentare la forma (dopo la conferma) al server.

L'idea di base è quella di tornare alla pagina precedente o la divisione del sito logica.

Guardando Gmail si vedrà se si fa una ricerca e fa clic su un messaggio poi ha colpito il pulsante indietro che vi porterà indietro alla ricerca che hai fatto.

Quando si fa clic in maggior parte dei browser sarà o inviare nuovamente l'ultima richiesta HTTP o caricherà una cache se il browser memorizza nella cache i siti.

Credo che il modo più semplice per spiegare questo è 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)

Una storia di pagine visualizzate è mantenuto in una forma di stack simile. Quando si "pop" le prime tre pagine (A, B, C, per esempio) e poi andare a una pagina diversa D, non è possibile ottenere a B ancora una volta colpendo in avanti.

Come devoloper, è necessario assicurarsi che il vostro webapp funziona non importa quanto il browser gestisce il pulsante Indietro :-) Ha inviare nuovamente la richiesta? È la nuova richiesta identico a quello vecchio, o che cosa differisce in alcun modo? Sarà il browser chiederà all'utente di confermare ri-POST? Quali elementi della pagina sarà nuovamente richiesto e che cosa caricate dalla cache? Sarà il browser rispettare i miei header Cache-Control?

Le risposte a queste domande dipendono dalla marca, versione di un browser e utente impostazioni. Disegno che il software in modo che tutto questo non importa più di tanto.

Ci scusiamo per risposta non molto diretto, ma ci sono alcune risposte dritte già qui.

un browser sempre conservato le pagine per il suo ricordare e quando premiamo il pulsante Indietro non invia la richiesta al server per la pagina precedente invece basta vedere la sua cache dove memorizzato le pagine e seguire la regola LIFO è per questo che ci dà quella pagina prima premendo il tasto back, che abbiamo aperto negli ultimi

Il browser carica l'ultima pagina visualizzata prima di quella corrente, e poi segue qualsiasi reindirizzamento che potrebbe accadere?

I tipi di sembrano mancare il punto della questione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top